2013-05-04 93 views
1

我試着調試代碼並閱讀Oracle文檔,但我看不到爲什麼結果集會被關閉。ResultSet.next()拋出SQLException:結果集關閉

Statement statement = DatabaseConnector.connect(); 
    String sql = "Select * from Room where Room_Type like '*"+roomType+"*' "+availability; 
    boolean foundResults = statement.execute(sql); 
    if(foundResults){ 
    ResultSet rs = statement.getResultSet(); 
    StringBuilder row = new StringBuilder(); 
    if(rs!=null){ 
    while(rs.next()){ 
+0

'System.out.println(sql)'的輸出是什麼? – Reimeus 2013-05-04 15:13:25

+0

「從Room_Type選擇* * Double *';」 – ThaSaleni 2013-05-04 15:19:20

回答

1

RE:的SQLException

我不是很確定DatabaseConnector應該在問題代碼中做什麼,但下面的測試代碼適用於我。

RE:通配符字符

當使用在查詢LIKE運算從接入應用程序本身內,那麼星號*是通配符使用。當從某個其他應用程序查詢ACE(Access)數據庫時,需要使用「標準」百分比%通配符。請注意以下代碼使用%;使用*不會在這裏工作。

import java.sql.*; 

public class JDBCQuery { 
    public static void main(String args[]) 
    { 
     try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection conn = DriverManager.getConnection(
        "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
        "Dbq=C:\\Users\\Public\\Database1.accdb;"); 
      String RoomTypeToMatch = "suite"; 
      PreparedStatement s = conn.prepareStatement(
        "SELECT Room_No, Room_Type " + 
        "FROM Room WHERE Room_Type LIKE ?" 
        ); 
      s.setString(1, "%" + RoomTypeToMatch + "%"); 
      s.execute(); 
      ResultSet rs = s.getResultSet(); 
      if (rs!=null) 
      { 
       while (rs.next()) 
       { 
        System.out.println("[Room_No]: " + rs.getString(1) + 
          ", [Room_Type]: " + rs.getString(2)); 
       } 
      } 
      s.close(); 
      conn.close(); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

非常感謝喲@GordThompson,尤其是對於解釋*通配符只適用於數據庫和I必須務實地使用%這是我的問題 – ThaSaleni 2013-05-04 18:18:35

0

SQLLIKE通配符charcaters表示爲%*

String sql = 
    "Select * from Room where Room_Type like '%"+roomType+ "%' "+availability; 

旁白:始終使用PreparedStatement項目針對SQL注入攻擊

+0

請記住,這是MS Acess不是Oracle,我在數據庫上使用*進行了測試,它的工作原理 – ThaSaleni 2013-05-04 15:20:30

+0

看起來像是一個JDBC而不是數據庫問題。除此之外,通配符不會出現在SQL查詢中... – Reimeus 2013-05-04 15:52:17

+0

它們正在出現,我只是無法將它們粘貼在這裏 – ThaSaleni 2013-05-04 15:59:45