SQLデータベースからデータを読み込むためのクラスを作成します。このクラスでは、一度に1つのデータベーステーブルを1行ずつ読み取ることができるメソッドが必要です。データはJavaオブジェクトに渡され、ユーザーはそれを使って何かを行うことができます。その後、ユーザーは次の行を読むことができます。Java SQLデータベーステーブルを一度に1行ずつ読み込みます
私のコードは:
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;
}
}
}
私は、ユーザーが一度にデータ1を取得するために次の操作を行うことができます想定しています
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
私は考えることができる唯一の方法は、ResultSetのローカル変数を保持していますそれが終わるまでrs.next()を使います。しかし、それが良い方法であるかどうかはわかりません。 ResultSetを使用せずに私がしたいことをするための良い方法はありますか?私は一度にテーブル1からデータを読み込みたいだけです。ありがとう。
limit句を使用できます。たとえば、mysql LIMITのhttp://dev.mysql.com/doc/refman/5.7/en/select.htmlでは、現在の行とオフセットをトラッキングするためにパラメータを渡す必要があります。この場合は1です。結果セットは1つに制限されます。あなたのオプションがあなたが使用しているDBのために何であるか分かりません。 – jasonlam604
@ jasonlam604ありがとうございます。しかし、私は顧客のために複数のリレーショナルデータベースをサポートする必要があるので、それはうまくありません。それはオフセットを取って追跡のために使用するため、やりやすいようです。私がサポートしなければならないデータベースは、SQLServer、MySQL、Oracle、PostgreSQLなど数多くあります。 –
どのデータベースですか?残念ながら、すべてに適用できる共通のSQL文はありません。各dbの個々の句を見つけ、コードを使用して適切なものを動的に適用する必要があります。 Oracleを使用したもう1つの例は、http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-ofrows-returned-by-an-oracle-query-after-ordering – jasonlam604