我必须查询MSSQL数据库,我希望查询结果作为Array或ArrayList返回。
我现在有了这个代码,但它给出了一个错误。 我有一个与数据库的连接,所以这不是问题。
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
答案 0 :(得分: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 :(得分: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)
方法,因此抛出了这个异常。
您可能需要最新的驱动程序,支持或替代解决方案才能解决此问题。
修改强>:
如果您真的希望获取Row
的当前Record
或ResultSet
,那么您对getRow()
和getArray(..)
的调用将无效,AFAIK此类实施将无法使用