簡體   English   中英

帶有JDBC的MySQL,沒有while循環,select不起作用,with不需要下一個查詢

[英]MySQL with JDBC, without while loop, select doesn't work, with while it doesn't take next query

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則不接受下一個查詢。

ResultSet是非常通用的提議接口,它基於游標

這是官方文檔的報價:

ResultSet對象維護一個游標,該游標指向其當前數據行。 最初,光標位於第一行之前。 next方法將光標移動到下一行,並且由於當ResultSet對象中沒有更多行時它返回false ,因此可以在while循環中使用它來迭代結果集。

這意味着您必須執行next才能移動光標。 是圖形圖示。

那么,為什么ResultSet是基於游標的呢?

為了允許基礎實現不將潛在的大量行加載到內存中。 光標是滾動潛在大數據的一種非常常見的模式。 例如, PgResultSet使用ResultCursor這樣做。

PS另外,請始終執行ResultSet.close()以釋放資源。

首先,在使用replaceAll您必須轉義所有字符,對於Java是一次,對於regex是第二次。

因此,如果在replaceAll使用\\ ,則必須這樣寫\\\\\\\\

其次,在發送之前先用sysout打印inst[i]的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM