Ich möchte eine Klasse schreiben, um Daten aus der SQL-Datenbank lesen zu können. In der Klasse sollte eine Methode vorhanden sein, die eine bestimmte Datenbanktabelle Zeile für Zeile lesen kann. Die Daten werden in das Java-Objekt übertragen und der Benutzer kann etwas damit tun. Dann kann der Benutzer die nächste Zeile lesen und so weiter.Java SQL liest die Datenbanktabelle Zeile für Zeile
Meine Codes:
public class DatabaseReader {
String table = "";
protected boolean available;
public boolean isAvailable()
{
return available;
}
public void setTable(String table)
{
this.table = table;
}
public String[] getData()
{
String sql = "SELECT * FROM "+table+";";
Connection con = getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rm = rs.getMetaData();
int count = rm.getColumnCount();
/**
* so I don't know what to do in here
* is there a better way to keep track of what rows already been read?
*/
if (rs.next()) {
for (int i = 1; i <= count; i++) {
System.out.print(rs.getString(i)+" , ");
}
System.out.println();
available = true;
} else {
available = false;
}
}
}
Ich nehme an Benutzer zu einem Zeitpunkt die folgenden zu bekommen Daten man tun kann:
DatabaseReader reader = new DatabaseReader();
reader.setTable("Product"); // assume Product table contains ID, name, price, etc.
while (reader.isAvailable) {
String[] data = getData();
Product product = new Product(data);
// add to a list of products or they can do something else
}
// maybe calculate total price of all products or whatever
Die einzige Art, wie ich denken kann, ist eine lokale Variable halten für ResultSet und benutze rs.next() bis es fertig ist. Aber ich bin mir nicht sicher, ob das ein guter Weg ist. Gibt es einen besseren Weg, um zu tun, was ich will, ohne ResultSet zu verwenden? Ich möchte nur Daten aus Tabelle eins nach der anderen lesen. Vielen Dank.
Sie können möglicherweise eine Limit-Klausel verwenden. Zum Beispiel müssen Sie in mysql LIMIT http://dev.mysql.com/doc/refman/5.7/en/select.html die Parameter übergeben, um Ihre aktuelle Zeile und den Offset zu verfolgen, was in diesem Fall 1 ist. Das würde Ihre Ergebnismenge auf nur einen beschränken. Nicht sicher, was Ihre Optionen für die DB sind, die Sie verwenden, was ist? – jasonlam604
@ jasonlam604 danke, aber das ist nicht gut, weil ich mehr als eine relationale Datenbank für Kunden unterstützen muss. Das scheint einfach zu sein, weil es einen Offset benötigt und das für das Tracking verwendet. Datenbank, die ich unterstützen muss, sind viele, wie SQLServer, MySQL, Oracle, PostgreSQL und einige andere. –
Welche Datenbank? Ich denke, leider gibt es keine gemeinsame SQL-Anweisung, die auf alle angewendet werden kann. Sie müssen die einzelnen Klauseln für jede Datenbank finden und dann dynamisch den passenden Code anwenden. Ein weiteres Beispiel mit Oracle http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-of-rows-returned-by-an-oracle-query-after-order – jasonlam604