我尝试调试代码并阅读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()){
答案 0 :(得分:1)
RE:SQLException
我不太确定DatabaseConnector
在问题代码中应该做什么,但以下测试代码对我有效。
RE:通配符
在Access应用程序本身中的查询中使用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();
}
}
}
答案 1 :(得分:0)
SQL
LIKE
个通配符表示为%
而不是*
String sql =
"Select * from Room where Room_Type like '%"+roomType+ "%' "+availability;
除此之外:始终使用Prepared Statement来防止SQL注入攻击