我想编写一个类,以便能够从SQL数据库中读取数据。在类中,应该有一个方法可以一次读取一行给定的数据库表。数据将传递到Java对象,用户可以使用它做一些事情。然后用户可以阅读下一行,依此类推。
我的代码:
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;
}
}
}
我假设用户可以执行以下操作以一次获取一个数据:
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?我只想一次从表中读取数据。感谢。
答案 0 :(得分:0)
您可以在您的类中保存ResultSet对象,并且每次调用方法getData()时,都会调用resultSet.next()来获取此表中的另一行。 但是,这不是一个好主意。因为数据库连接不会被释放,并且数据库连接是整个系统的罕见来源。由于数据库隔离,你将无法通过其他线程读取更新。