Java SQL一次读取一行数据库表

时间:2016-08-10 20:15:15

标签: java sql

我想编写一个类,以便能够从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?我只想一次从表中读取数据。感谢。

1 个答案:

答案 0 :(得分:0)

您可以在您的类中保存ResultSet对象,并且每次调用方法getData()时,都会调用resultSet.next()来获取此表中的另一行。 但是,这不是一个好主意。因为数据库连接不会被释放,并且数据库连接是整个系统的罕见来源。由于数据库隔离,你将无法通过其他线程读取更新。