0

私は以下のエラーが発生しています

[Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt

私のコード

private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static final String URL = "jdbc:odbc:sql2008";
private String[] entity = {"TABLE","VIEW"};
private ResultSet tables,columns,resultSet;

public void getData() throws SQLException, ClassNotFoundException{
    Class.forName(DRIVER);
    Connection  connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
    DatabaseMetaData data = connection.getMetaData();
     resultSet =  data.getCatalogs();

     while (resultSet.next()) {
         String dbName = resultSet.getString("TABLE_CAT");
        if(dbName.toString().equals("db")){
            tables=data.getTables(dbName, "%", "%", entity);
            while (tables.next()) {
                           System.out.println(tables.getString("TABLE_NAME"));
            }
        }
    }
}

URL は DSN 接続 (dsn 名を使用した接続) であり、再び ResultSet であるテーブルをフェッチしようとしているときにこのエラーが発生しますが、直接 (アドレスを使用) する DSN なしの接続では正常に動作します

4

1 に答える 1

1

同時に 2 つの結果セットを反復処理しています。

  1. while (resultSet.next()) {
  2. while (tables.next()) {

エラー メッセージによると、これは許可されていません。

List<String> databaseNames最初の反復の結果を a に入れ、そのリストを反復してテーブルをリストすることで修正できます。

または、SQL Server 2005 を使用している場合は、「複数のアクティブな結果セット」と呼ばれる SQL Server の機能を有効にしてみてください。

于 2013-04-02T12:19:46.503 に答える