2011-02-15 236 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()]); 
}