将SQL Query结果转换为字符串数组

我使用SQLiteJDBC(SQLite的Java JDBC驱动程序)在Java中查询SQLite3数据库。

如果我创建SQL查询SELECT名称,则传递FROM loginTable WHERE name =’%s’; 是否有函数返回或转换名称并将查询返回的字符串传递给String数组或ArrayList?

下面的代码尝试将查询返回到数组列表但它失败了,我知道SQL数据库很好并且我的查询是因为当我在命令行中执行此操作时它可以工作。

ArrayList  result = new ArrayList(); ResultSet rs = stat.executeQuery( "SELECT ..." ); for (int i=0; rs.next(); i++) { result.add( rs.getString(i) ); } 

它失败,因为表loginTable有列:Index,name,pass。 所以看看上面,当i = 0时,我去了rs.getString(0),它试图在Index列中获取字符串。

错误输出是

java.sql.SQLException:第0列超出范围[1,1]

有谁知道如何将SQL查询(ResultSet对象)的所有结果放在ArrayList或数组中?

在JDBC中,列从1开始索引,而不是0。

要仅存储第一行的列,请尝试

 int columnCount = rs.getMetaData().getColumnCount(); rs.next(); for (int i = 0; i  

如果要存储包含所有行和所有列的ArrayList

 ArrayList  result = new ArrayList(); ResultSet rs = stat.executeQuery( "SELECT ..." ); int columnCount = rs.getMetaData().getColumnCount(); while(rs.next()) { String[] row = new String[columnCount]; for (int i=0; i  

根据肖恩的回答更新

这对我有用:

 public static String[] getRooms() throws SQLException, JSONException, ClassNotFoundException{ ArrayList a = new ArrayList(); Class.forName(sqlDriver); Connection con = DriverManager.getConnection(dtbSet, dtbUsername, dtbPassword); PreparedStatement ps = con.prepareStatement("SELECT room_name FROM "+ dtbTbl2); ResultSet rs = ps.executeQuery(); while(rs.next()) { a.add(rs.getString(1)); } return (String[]) a.toArray(new String[a.size()]); } 

首先,不要使用for loop因为你从每一行只得到一个不同的列…每次你点击rs.next() ,它会在你从一个列中获取所有列值之前进入下一行行。 相反,使用while (rs.next())来检查行是否存在。

其次,正如@shaun所提到的,JDBC列以1开头,而不是零。

第三,要将数据放入列表中,您需要有一个POJO或bean来保存每行的所有信息。

所以,最后,代码就像这样: –

 Connection con = ...; PreparedStatement ps = con.prepareStatement("SELECT name, pass FROM loginTable WHERE name = ?"); ps.setString(1, "mike"); ResultSet rs = ps.executeQuery(); List users = new ArrayList(); while(rs.next()) { String name = rs.getString(1); String pass = rs.getString(2); users.add(new User(name, pass)); } ... 

您可能想看一下这个框架。 http://commons.apache.org/dbutils/

具体来说,您可以查询数据库并返回查询的arraylist。 这是伪代码中的一个例子:

 ResultSetHandler h = new ArrayListHandler(); QueryRunner qr = new QueryRunner(); List results = (List)qr.query(sql, h); 

另外这里是另一个使用它的网站: http : //www.stupidjavatricks.com/?p = 45