【问题标题】:Return an array after querying database in Java用Java查询数据库后返回一个数组
【发布时间】:2012-04-27 08:16:51
【问题描述】:

我必须查询一个 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

【问题讨论】:

  • 顺便说一句,您应该使用 try/finally 构造来关闭您的 ResultSetStatement 对象。
  • @Mulmoth 我会看看谢谢 :)

标签: java sql-server jdbc


【解决方案1】:

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);
}

【讨论】:

  • 几乎,“特定列的所有值”,应该以数组的形式获取当前行的列的值
【解决方案2】:

您的异常跟踪显示:

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) 方法,因此抛出了这个异常。

您可能需要最新的驱动程序、支持或替代解决方案来解决此问题。

编辑
如果您真的想要获取当前的RowRecordResultSet,那么您对getRow()getArray(..) 的调用将不起作用,并且AFAIK 这样的实现不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 2019-12-04
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2021-01-20
    相关资源
    最近更新 更多