Probleme bei ResultSet in einer While-Schleife

Status
Nicht offen für weitere Antworten.

bluefish

Neues Mitglied
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:
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();
		}

	}
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!
 
schau dir erstmal an was dein sql-server mit deinem sql ausgibt.

rs.next arbeitet eigentlich immer korrekt.

cu
 
jepp, hab ich gemacht. Meine Postgres Datenbank warf schon ein seltsames query ab. Aber Du hast recht, es lag am SQL-Statement ....also kein Fehler im Java Programm.


Danke.

DP hat gesagt.:
schau dir erstmal an was dein sql-server mit deinem sql ausgibt.

rs.next arbeitet eigentlich immer korrekt.

cu
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben