Hallo,
ich bin erst vor kurzem von PHP auf JAVA umgestiegen und habe so hier und da meine Anfängerschwierigkeiten mit JAVA. Ich arbeite an meiner ersten Datenbankgestützten JAVA-Anwendung, die Werte von einer Datenbank ausliest, validiert und an eine weiteren Klasse zu Verarbeitung weitergibt. Soviel zum Hintergrund.
Mein Problem. Ich benötige einen int-Wert aus einer Datenbankspalte, die ich mit der toString(String)-Mehtode auslese. Tue ich dies ausserahlb meiner While-Schleife, erhalte ich - wie erwartet - einen Wert zurück. In meiner While-Schleife erhalte ich genau den selben Wert aber mehrmals. Aus irgendeinen Grund scheint mein Programm die While-Schleife mehrmals zu durchlaufen.
Hier ein Auszug aus dem Quelltext:
Was mache ich falsch? Hoffem mir kann jemand weiterhelfen!
Danke und Gruss,
Übrigens: Wenn ich erst rs.getlast() und dann rs.getRows() aufrufe, erhalte ich als Ergebnis 6000 zurück. Ich muss das ResultSet doch nicht bei jedem Programmaufruf leeren, oder? Ich denke selbst wenn das Programm so weiter laufen würde, würde der Garbage Collector den Speicher frei räumen ..oder?
Ich bin mal einen Schritt weitergekommen. Es liegt am SQL-Statement!
ich bin erst vor kurzem von PHP auf JAVA umgestiegen und habe so hier und da meine Anfängerschwierigkeiten mit JAVA. Ich arbeite an meiner ersten Datenbankgestützten JAVA-Anwendung, die Werte von einer Datenbank ausliest, validiert und an eine weiteren Klasse zu Verarbeitung weitergibt. Soviel zum Hintergrund.
Mein Problem. Ich benötige einen int-Wert aus einer Datenbankspalte, die ich mit der toString(String)-Mehtode auslese. Tue ich dies ausserahlb meiner While-Schleife, erhalte ich - wie erwartet - einen Wert zurück. In meiner While-Schleife erhalte ich genau den selben Wert aber mehrmals. Aus irgendeinen Grund scheint mein Programm die While-Schleife mehrmals zu durchlaufen.
Hier ein Auszug aus dem Quelltext:
Code:
public LabelImport() {
ResultSet rs = null;
ResultSetMetaData rsmd = null;
Collection c = null;
int i, rows = 0;
/* Create Database Connection and Queries */
DB db = initDB(DB.PGSQL);
/* SQL Statement */
try {
rs = db.sqlquery("SELECT orders.id as orderid,orders.shopkey,orderpos.attributes FROM orders WHERE orderpos.clearance_stat=9 AND orderpos.attributes!='' ORDER BY id");
} catch (SQLException e) {
System.out.println("SQL Statement schlug fehl");
e.printStackTrace();
}
try {
rsmd = rs.getMetaData();
// Hier würde mein Problemfall immer nur eine id ausgeben
try {
rows = countRows(rs);
} catch (Throwable e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
while (rs.next()) {
String id = rs.getString( "orderid" ); // Hier gibt es mehrmals die gleiche id aus.
String xml = rs.getString( "attributes" );
String n = getETN(xml);
String order_id = rs.getString( "shopkey" ) + "_" + id;
if (n != null) {
n = n.trim();
boolean b = Pattern.matches("[0-9]*", n);
if (n != "" && b) {
callLabel(n,order_id);
}
}
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
Danke und Gruss,
Übrigens: Wenn ich erst rs.getlast() und dann rs.getRows() aufrufe, erhalte ich als Ergebnis 6000 zurück. Ich muss das ResultSet doch nicht bei jedem Programmaufruf leeren, oder? Ich denke selbst wenn das Programm so weiter laufen würde, würde der Garbage Collector den Speicher frei räumen ..oder?
Ich bin mal einen Schritt weitergekommen. Es liegt am SQL-Statement!