1

我尝试调试代码并阅读 Oracle 文档,但我看不出结果集会关闭的任何原因。

 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()){
4

2 回答 2

1

回复:SQL异常

我不太确定DatabaseConnector在问题代码中应该做什么,但以下测试代码对我有用。

RE:通配符

在 Access 应用程序本身的查询中使用 LIKE 运算符时,星号*是要使用的通配符。从其他应用程序查询 ACE (Access) 数据库时,需要使用“标准”百分比%通配符。请注意,以下代码使用%; using*在这里不起作用。

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();
        }
    }
}
于 2013-05-04T17:12:45.180 回答
0

SQL LIKE通配符表示为%not*

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

旁白:始终使用 PreparedStatement 来对抗 SQL 注入攻击

于 2013-05-04T15:08:02.007 回答