使用JDBC的MySQL,没有while循环,选择不起作用,虽然它没有进行下一个查询

时间:2018-05-25 11:43:39

标签: java mysql sql jdbc

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 :(得分:0)

ResultSet是非常通用的建议界面,它是基于光标的

以下是官方文件的引用:

  

ResultSet对象维护一个指向其当前数据行的光标。最初,光标位于第一行之前。 next方法将光标移动到下一行,因为当false对象中没有更多行时它返回ResultSet,它可以在while中使用循环迭代结果集。

这意味着您必须执行next移动光标。 Here是图解说明。

为什么ResultSet基于光标?

允许底层实现不会将潜在的大量行加载到内存中。光标是滚动可能大数据的非常常见的模式。例如,PgResultSet使用ResultCursor来执行此操作。

<强> P.S。 另外,请始终执行ResultSet.close()以释放资源。

答案 1 :(得分:0)

首先,在使用replaceAll时,您必须转义所有字符,一次转义为Java,第二次转义为正则表达式。

因此,如果您在\中使用replaceAll,则必须像\\\\一样撰写。

其次,在发送之前使用sysout打印inst[i]的内容。