2011-02-15 68 views
4

我正在使用SQLiteJDBC(SQLite的Java JDBC驱动程序)在Java中对SQLite3数据库进行查询。将SQL查询结果转换为字符串数组

如果我进行SQL查询SELECT name,传递FROM loginTable WHERE name ='%s';是否有返回或转换名称&从查询返回的字符串转换为字符串数组或ArrayList的函数?

以下代码尝试将查询返回到数组列表中,但它失败,我知道SQL数据库正常&查询我做,因为当我在命令行中执行此操作时它的工作原理。

ArrayList <String> result = new ArrayList<String>(); 
ResultSet rs = stat.executeQuery("SELECT ..."); 

for (int i=0; rs.next(); i++) 
{ 
    result.add(rs.getString(i)); 
} 

由于表loginTable具有列:Index,name,pass,所以失败。所以看上面,当我= 0,&我去rs.getString(0),它试图获取索引列中的字符串。

错误输出

值java.sql.SQLException:0列出界[1,1]

有谁知道我怎样才能把所有的结果从SQL查询(ResultSet对象)在一个ArrayList或数组?

回答

9

要只存储在第一行的列,尽量

int columnCount = rs.getMetaData().getColumnCount(); 
rs.next(); 
for (int i = 0; i <columnCount ; i++) 
{ 
    result.add(rs.getString(i + 1)); 
} 

如果你想存储ArrayList<String[]>其中包含所有行和列:

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

每肖恩的答案更新

9

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

+0

+1从.NET`DataReader`的到来,不知道JDBC开始于1 – 2011-02-16 00:06:47

1

首先,不要使用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<User> users = new ArrayList<User>(); 

while(rs.next()) { 
    String name = rs.getString(1); 
    String pass = rs.getString(2); 
    users.add(new User(name, pass)); 
} 

... 
1

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

具体而言,您可以查询数据库并返回查询的数组列表。下面是伪代码的例子:

ResultSetHandler h = new ArrayListHandler(); 
QueryRunner qr = new QueryRunner(); 

List<Object[]> results = (List<Object[]>)qr.query(sql, h); 

而且,这里是一个使用此另一个网站: http://www.stupidjavatricks.com/?p=45

2

这为我工作:

public static String[] getRooms() throws SQLException, JSONException, ClassNotFoundException{ 
    ArrayList<String> a = new ArrayList<String>(); 

    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()]); 
} 
相关问题