Fehlerhafte Datenbankabfrage

Br4ve

Bekanntes Mitglied
Hallo,
Ich habe ein Problem mit einer Datenbankabfrage, obwohl es wohl eigentlich viel mehr ein Problem der Schleife zur Befüllung der Liste mit den Datenbankergebnissen ist vermute ich.

hier mein Code:

Java:
public static ArrayList<ArrayList<String>> getParg(String psid,String db){
	ArrayList<ArrayList<String>> listemain = new ArrayList<ArrayList<String>>();
	ArrayList<String> liste = new ArrayList<String>();
	ResultSet rs = null;
	PreparedStatement pstmt;
	Connection con = datenbankZugriff.dbverbindung.getConnection(db);
	
	try {
		pstmt = con.prepareStatement("select argument.argname,argument.description,possibleargvalue.displayvalue " +
				"from processstep,processstepargvalue,argument,toolrelease, possibleargvalue where " +
				"processstepargvalue.argid = argument.argid and possibleargvalue.argid = argument.argid and " +
				"processstepargvalue.value = possibleargvalue.value and processstep.psid = processstepargvalue.psid " +
				"and argument.treleaseid = toolrelease.treleaseid and processstep.psid = ? ");
		pstmt.setString(1,  psid);
		rs = pstmt.executeQuery();
		while(rs.next()){
			
			liste.clear();
			liste.add(rs.getString(1));
			liste.add(rs.getString(2));
			liste.add(rs.getString(3));
			
			listemain.add(liste);
		}
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	
	
	return listemain;
	
}

Es geht hierbei um eine Tabelle mit 3 Spalten, diese 3 Spalten möchte ich in "liste" speichern und die einzelnen Zeilen der Tabelle dann sozusagen in "listemain". Vermutlich liegt das Problem bei "liste.clear()" ich hatte das zuvor ganz am ende der while-Schleife, erhielt dann jedoch eine index out of bounds exception beim ausführen. In dieser Anordnung jedoch erhalte ich in listemain 13 Einträge mit den Ergebnissen der letzten Spalte. Wo liegt mein Fehler?
 
Mach statt
Java:
liste.clear();
einfach
Java:
liste = new ArrayList<String>();

Dadurch fügst Du einfach eine neue Instanz der Liste der main-Liste hinzu. Ansonsten löscht Du nur die bisherigen Einträge und fügst neue hinzu.
Also es wird immer die gleiche Liste hinzugefügt, nur dass sich eben die Daten ändern (bzw. mehr werden).
 

Zurück
Oben