mysql和jdbc,没有while循环,select不工作,while不接受下一个查询

ddarikpa  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(249)
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则不接受下一个查询。

ddrv8njm

ddrv8njm1#

首先,在使用上 replaceAll 必须对所有字符进行转义,一次用于java,第二次用于regex。
所以如果你用 \ 在一个 replaceAll 你一定要这样写 \\\\ .
第二,用sysout打印 inst[i] 在发送之前。

0qx6xfy6

0qx6xfy62#

这个 ResultSet 是一个非常通用的接口,它是基于游标的。
以下引用官方文件:
ResultSet 对象保持指向其当前数据行的光标。最初,光标位于第一行之前。这个 next 方法将光标移动到下一行,因为它返回 false 当表中没有更多行时 ResultSet 对象,它可以用于 while 循环遍历结果集。
这意味着你必须表演 next 移动光标。这是图示。
那为什么呢 ResultSet 是否基于光标?
允许底层实现不将潜在的大量行加载到内存中。光标是滚动潜在大数据的常见模式。例如,pgresultset使用resultcursor执行此操作。
p、 也请始终执行 ResultSet.close() 释放资源。

相关问题