gamerfunkie
Erfahrenes Mitglied
Hallo,
ich habe mir eine Klasse geschrieben, mit der ich SELECT-Queries ausführen kann. Die Funktion executeQuery, soll ein Array zurückgeben, wobei jeder Arrayeintrag eine Zeile des Queryresults repräsentiert, und somit wieder ein Array sein muss, da ich den Namen der Spalte auch zurückbekommen will, also z.B. so:
Das geht in JAVA natürlich nicht, aber so weiss hoffentlich jeder was ich als Rückgabe benötige. Um also ein mehrdimensionales Array mit Strings als Schlüsseln zu relisieren, habe ich folgendes probiert:
Das ganze sieht dann bei mir in JAVA so aus:
Das funktioniert auch alles soweit gut, ich bekomme auch eine zweidimensionale Hashtable zurück, so gross wie sie sein muss, doch leider sind immer die gleichen Zeilen vorhanden(und nciht unterschiedliche so wie es sein müsste, d.h. wenn in der DB 10 unterschiedliche Datensätze sind, bekomme ich 10 mal den gleichen zurück).
Ich habe mal alle Datensätze in ein String geschrieben und mir den ausgeben lassen. Hier sind alle Datensätze vorhanden, deshalb gehe ich davon aus das irgendwo ein Problem beim Umgang mit den hashtables besteht.
Ich hoffe ihr könnt mir helfen und ich habe mich verständlich ausgedrückt.
gamerfunkie
ich habe mir eine Klasse geschrieben, mit der ich SELECT-Queries ausführen kann. Die Funktion executeQuery, soll ein Array zurückgeben, wobei jeder Arrayeintrag eine Zeile des Queryresults repräsentiert, und somit wieder ein Array sein muss, da ich den Namen der Spalte auch zurückbekommen will, also z.B. so:
Code:
Tabelle table1 in MySQL:
| spalteA | spalteB |
+ ---------- + ---------- +
| foo | bar |
| xyz | 123 |
Code:
Rückgabearray des Statements SELECT * FROM table1; :
String str = result[0]["spalteA"] //str = foo
String str = result[0]["spalteB"] //str = bar
String str = result[1]["spalteA"] //str = xyz
String str = result[1]["spalteB"] //str = 123
Code:
public Hashtable<Number, Hashtable<String, String>> executeQuery(String query)
{
Hashtable<Number, Hashtable<String, String>> sqlResult = new Hashtable<Number, Hashtable<String, String>>();
Hashtable<String,String> row = new Hashtable<String,String>();
while(zeilen vorhanden)
{
row.clear();
while(spalte in aktueller zeile)
{
row.put(spaltenname, wert)
}
sqlResult.put(aktuelle zeile, row)
}
}
Das ganze sieht dann bei mir in JAVA so aus:
Code:
public Hashtable<Number, Hashtable<String, String>> executeQuery(String query) {
Hashtable<Number, Hashtable<String, String>> sqlResult = new Hashtable<Number, Hashtable<String, String>>();
Hashtable<String,String> row = new Hashtable<String,String>();
ResultSet result = null;
int rowNum = 0;
try {
Statement st = this.conn.createStatement();
result = st.executeQuery(query);
ResultSetMetaData rsmd = result.getMetaData();
while (result.next())
{
row.clear();
for (int i = 1; i <= rsmd.getColumnCount(); i++)
{
row.put("["+rowNum+"]"+rsmd.getColumnName(i), result.getString(i)+"<br>");
}
this._debug += row+"<br>";
sqlResult.put(rowNum, row);
rowNum++;
}
}
catch (SQLException e)
{
this.lastError = e;
}
return sqlResult;
}
Das funktioniert auch alles soweit gut, ich bekomme auch eine zweidimensionale Hashtable zurück, so gross wie sie sein muss, doch leider sind immer die gleichen Zeilen vorhanden(und nciht unterschiedliche so wie es sein müsste, d.h. wenn in der DB 10 unterschiedliche Datensätze sind, bekomme ich 10 mal den gleichen zurück).
Ich habe mal alle Datensätze in ein String geschrieben und mir den ausgeben lassen. Hier sind alle Datensätze vorhanden, deshalb gehe ich davon aus das irgendwo ein Problem beim Umgang mit den hashtables besteht.
Ich hoffe ihr könnt mir helfen und ich habe mich verständlich ausgedrückt.
gamerfunkie