2012-04-27 75 views
3

我必須查詢MSSQL數據庫,並且希望查詢的結果作爲Array或ArrayList返回。在Java中查詢數據庫之後返回數組

我現在有一個這樣的代碼,但它給出了一個錯誤。 我有一個連接到數據庫,所以這不是問題。

public ArrayList<Array> queryResult(String q) throws SQLException { 

    ArrayList<Array> array = new ArrayList<>(); 
    Statement statement = this.getConnection().createStatement(); 
    ResultSet rs = statement.executeQuery(q); 

    while(rs.next()) { 

     Array n = rs.getArray(rs.getRow()); 
     System.out.println(n); 
     array.add(n); 

    } 
    return array; 
} 

我得到以下錯誤

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: This operation is not supported. 
     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) 
     at com.microsoft.sqlserver.jdbc.SQLServerResultSet.NotImplemented(SQLServerResultSet.java:750) 
     at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getArray(SQLServerResultSet.java:2625) 
     at server.Database.queryResult(Database.java:52) 
     at server.Server.listen(Server.java:57) 
     at server.Server.run(Server.java:34) at 
     server.Server.<init>(Server.java:28) at 
     server.Server.main(Server.java:94) Java Result: 1 
+3

btw你應該使用try/finally結構來關閉你的ResultSet和Statement對象。 – Zeemee 2012-04-27 08:32:58

+0

@Mulmoth我會看看它,謝謝:) – 2012-04-27 08:53:49

回答

4

getArray()返回當前行的作爲陣列的特定列的值。看到這個 - http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getArray%28int%29

如果你想獲得行值作爲數組,那麼你必須爲這樣的事情寫代碼。

while (rs.next()){ 
    java.util.ArrayList alRowData = new java.util.ArrayList(); 
    java.sql.ResultSetMetaData rsmd = rs.getMetaData(); 
    int numberOfColumns = rsmd.getColumnCount(); 
    for(int columnIndex = 1; columnIndex <= numberOfColumns; columnIndex ++){ 
      alRowData.add(rs.getObject(columnIndex)); 
    } 
    System.out.println(alRowData); 
} 
+1

幾乎所有的「特定列的值」應該獲得_current_行的列作爲數組的值 – vickirk 2012-04-27 08:47:17

+0

@vickirk更正。謝謝。 – 2012-04-27 08:50:43

+0

謝謝你解決了它:) – 2012-04-27 08:52:41

1

你的異常跟蹤表明:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: This operation is not supported. 
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) 
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.NotImplemented(SQLServerResultSet.java:750) 
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getArray(SQLServerResultSet.java:2625) 

好像你使用的SQLDriver,沒有實現getArray(int)方法,因此引發此異常。

您可能需要最新的驅動程序,支持或其他解決方案來解決此問題。

編輯
如果你真的正在尋找獲取當前或ResultSetRecord那麼你到getRow()getArray(..)調用不會工作,據我所知這種實現是不可用的。

相關問題