hi ich hab ein problem und zwar weis ich leider nicht woran es liegen könnte…
Das Problem is folgendes… ich mache eine Abrage auf eine Access Datenbank… wenn ich das 1 mal mache geht das ganze ohne probleme… aber das programm in dem der zugriff verwendet wird greift mehrmals auf das „Statment“ zu und holt sich einen neuen „Resultset“… zu testzwecken hab ich eine for schleife gemacht die mir z.b 200 mal hintereinander einen Resultset aus dem Statment holt… je komplexer der Programmcode ist desto öfter bekomm ich eine java.sql.SQLException mit der nichtsagenden Meldung General Error… oder Function Proccessing Error… meistens bricht er beim 37 oder 38 durchgang damit ab da er eine Nullpointerexception wirft… was auch klar is da er versucht mit der next() methode auf einen nicht vorhandenen Resultset zu zugreifen…
Woran kann das liegen?? ODBC Treiber? JDBC version?AccessDatenbank? statische Deklaration der Methoden?
oder programmcode?
Danke für eure hilfe im voraus
Hier ist eine stark verkürzte Form des Programmcodes…
//Datei Datenbank.java
import java.sql.*;
import java.util.*;
public class Datenbank
{
private static Statement stmt = null;
private static Connection conn = null;
private static boolean lock=false;
//****Allgemeine Datenbankzugriffsmethoden****
public static void ODBCStarten()
{
if (stmt != null) return;
try{
Class.forName(„sun.jdbc.odbc.JdbcOdbcDriver“);
}catch(Exception e)
{System.out.println(e);}
String url = „jdbc:odbc:Test“;
try{
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
}catch(Exception e)
{System.out.println(e);}
}
public static void ODBCBeenden()
{try{
stmt.close();
conn.close();
}catch(SQLException e)
{System.out.println(„Datenbank konnte nicht geschlossen werden“);}
}
private static ResultSet getResultSet(String Query)
{ ResultSet result=null;
try{
if (stmt == null) return null;
while(result==null)
{
result = stmt.executeQuery(Query);
}
}catch(Exception e)
{System.out.println("getResultSet : " + e);}
return result;
}
public static Vector getTestList()
{
Vector testList = new Vector();
RequestTest test = null;
ResultSet set = null;
set = getResultSet(„SELECT * FROM test;“);
try{
while(set.next())
{
test = new RequestTest(set.getLong(1),set.getString(2),set.getBoolean(3),set.getString(4));
testList.add(test);
}
}catch(SQLException e)
{System.out.println(„getTestlist|next :“ + e);}
return testList;
}
public static void main(String args[])
{
ODBCStarten();
int zaehler=1;
for (int j=0;j//class RequestTest.java
import java.util.Vector;
public class RequestTest
{
private long testID;
private boolean multiple;
private String name; // = Testname
private String ausfuellVorschrift;
private Vector fragen=null;
private Vector ergebnisse=null;
//
// Konstruktor initialisiert das Objekt mit Werten aus dem DB-Zugriff
//
public RequestTest(long testID, String name, boolean multiple, String ausfuellVorschrift)
{
this.testID = testID;
this.multiple = multiple;
this.name = name;
this.ausfuellVorschrift = ausfuellVorschrift;
}
public RequestTest(long testID, String name, boolean multiple, String ausfuellVorschrift, Vector fragen, Vector ergebnisse)
{
this.testID = testID;
this.multiple = multiple;
this.name = name;
this.ausfuellVorschrift = ausfuellVorschrift;
this.fragen = fragen;
this.ergebnisse = ergebnisse;
}
//
// Methoden zur Übergabe der Felder nach außen
//
public long getID()
{
return testID;
}
public boolean isMultiple()
{
return multiple;
}
public String getName()
{
return name;
}
public String getAusfuellvorschrift()
{
return ausfuellVorschrift;
}
public Vector getFragen()
{
return fragen;
}
public Vector getErgebnisse()
{
return ergebnisse;
}
public void setFragen(Vector fragen)
{this.fragen = fragen;
}
public void setErgebnisse(Vector ergebnisse)
{this.ergebnisse = ergebnisse;
}
}