3

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
4

2 に答える 2

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);
}
于 2012-04-27T08:37:28.967 に答える
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)メソッドを実装していないため、この例外がスローされています。

この問題を解決するには、最新のドライバー、サポート、または代替ソリューションが必要になる場合があります。

EDIT
あなたが本当に現在Rowまたはそれ以降Recordを取得しようとしている場合、 andResultSetへの呼び出しは機能せず、AFAIKのような実装は利用できません。getRow()getArray(..)

于 2012-04-27T08:39:55.480 に答える