MySQL с JDBC, без цикла while, выбор не работает, с, пока он не принимает следующий запрос - PullRequest
0 голосов
/ 25 мая 2018
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 выбор не работает, тогда как следующий запрос не выполняется.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Во-первых, при использовании replaceAll вы должны экранировать все символы, один раз для Java и второй раз для регулярного выражения.

Так что если вы используете \ в replaceAll, вы должны писать как\\\\.

Во-вторых, напечатайте sysout содержимое inst[i] перед отправкой.

0 голосов
/ 25 мая 2018

ResultSet - это очень общий интерфейс, и он основан на курсоре .

Вот цитата из официальной документации:

A ResultSetОбъект поддерживает курсор, указывающий на его текущую строку данных.Первоначально курсор располагается перед первым рядом.Метод next перемещает курсор на следующую строку, и поскольку он возвращает false, когда в объекте ResultSet больше нет строк, его можно использовать в цикле while для итерации по набору результатов.

Это означает, что вы должны выполнить next, чтобы переместить курсор. Здесь - графическая иллюстрация.

Так почему ResultSet основан на курсоре?

Чтобы базовая реализация не загружала потенциально огромное количествостроки в память.Курсор является очень распространенным шаблоном для прокрутки потенциально больших данных.Например, PgResultSet использует для этого ResultCursor .

PS Также всегда выполняйте ResultSet.close() для освобождения ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...