我使用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)
我该如何解决这个问题?
答案 0 :(得分:2)
在尝试从一行访问数据之前,您需要执行resultSet.next();
。根据您的查询,您正在选择1列&#34;库存&#34;来自表&#34;库存&#34;。所以我不确定为什么你会得到一个列数,因为只有一列。
此外,如果你想循环遍历所有记录,你应该使用如下的循环:
while(resultSet.next())
{
//code here
}