bugfix> java > 投稿
FileReader fr = new FileReader(new File("D:\\folder\\mySQLFile1.txt"));
BufferedReader br = new BufferedReader(fr);
while((s = br.readLine()) != null) {
    sb.append(s);
}
br.close();
String sbq=sb.toString();
String S1 = sbq.replaceAll("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)","");
String[] inst = S1.split(";|/");
for (int i = 0; i<inst.length; i++) {           
    if (!inst[i].trim().equals("")) { 
        ResultSet resultSet = stmt.executeQuery(inst[i]);
        ResultSetMetaData rsmd = resultSet.getMetaData();
        int columnsNumber = rsmd.getColumnCount();
        // while (resultSet.next()) {
            for (int x = 1; x <= columnsNumber; x++) {
                String columnValue = resultSet.getString(x);
                System.out.print(columnValue + " " );
            }
            System.out.println("");
        // }
    }
    System.out.println();
}

whileループがないと、selectは機能せず、whileは次のクエリを受け取りません。

回答 2 件
  • ザ・ ResultSet  非常に一般的な提案インターフェースであり、カーソルベース

    公式ドキュメントからの引用です:

    A ResultSet  オブジェクトは、現在のデータ行を指すカーソルを保持します。最初は、カーソルは最初の行の前に配置されます。ザ・ next  メソッドはカーソルを次の行に移動します。これは false を返すためです   ResultSet に行がもうないとき  オブジェクト、それは while で使用できます  結果セットを反復処理するループ。

    これはあなたを意味しますする必要がある  next を実行する  カーソルを移動します。これが図解です。

    なぜ ResultSet  カーソルベースですか?

    基礎となる実装がメモリに潜在的に膨大な数の行をロードしないようにするため。カーソルは、潜在的にビッグデータをスクロールするための非常に一般的なパターンです。たとえば、PgResultSetはResultCursorを使用してそうします。

    追伸 また、常に ResultSet.close() を実行してください  リソースを解放します。

  • まず、 replaceAll を使用する場合  Javaの場合は1回、正規表現の場合は2回、すべての文字をエスケープする必要があります。

    したがって、 \ を使用する場合  で replaceAll  あなたはその \\\\ のように書く必要があります 。

    第二に、sysoutで inst[i] の内容を印刷します  それを送る前に。

あなたの答え