在Java中使用ArrayList存储MySQL数据库项

时间:2014-12-17 19:31:51

标签: java mysql jdbc arraylist

我使用JDBC连接到我的MySQL数据库,我需要检索表中的所有项目并将它们存储在ArrayList中。这是我正在使用的代码:

Connection con;
Statement statement;
ResultSet resultSet;
ArrayList<String> inventorySet = new ArrayList<String>();
ResultSetMetaData md;

try
{
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(url, root, password);

    statement = con.createStatement();
    resultSet = statement.executeQuery("SELECT inventory FROM inventory");
    md = resultSet.getMetaData();
    for(int i = 1; i <= md.getColumnCount(); i++)
    {
        inventorySet.add(resultSet.getString(i));
    }
}catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }catch(SQLException e)
{
    e.printStackTrace();
}

但是我收到了这个错误:

java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:781)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5239)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5162)  
    at Inventory.main(Inventory.java:136)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在尝试从一行访问数据之前,您需要执行resultSet.next();。根据您的查询,您正在选择1列&#34;库存&#34;来自表&#34;库存&#34;。所以我不确定为什么你会得到一个列数,因为只有一列。

此外,如果你想循环遍历所有记录,你应该使用如下的循环:

while(resultSet.next())
{
    //code here
}