我正在创建一个Java程序,它与学校项目的mysql数据库连接: 当用户通过GUI点击搜索按钮时,我使用java mysql连接器执行以下查询:
public ResultSet getBooks(String book_id,String title,String author)
{
ResultSet rs = null;
try{
Statement stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT book_id,title,author_name,branch_id,no_of_copies FROM "
+ "(temp_author NATURAL JOIN book_copies) "
+ "WHERE book_id like '%"+book_id+"%' OR title like '%"+title+"%' OR author_name like '%"+author+"%';");
}
catch(SQLException ex) {
System.out.println("Error in connection: " + ex.getMessage());
}
return rs;
}
此查询的问题是,如果任何字段(书籍ID,标题或作者)为空,则查询将返回true作为结果。 所以我的问题是如何使用通配符搜索匹配的字符串,但在字符串(boook_id,title或author)为空时返回空集。
谢谢。
PS:由于声誉不佳,我无法发布GUI图片。
答案 0 :(得分:1)
假设您的book_id
String
不是null
,您可以这样做:
WHERE ('"+book_id+"' <> '' AND book_id like '%"+book_id+"%') OR
('"+title+"' <> '' AND title like '%"+title+"%') OR
('"+author_name+"' <> '' AND author_name like '%"+author+"%')
我建议您也使用预备语句(为安全起见!)。
答案 1 :(得分:0)
只需执行此类操作,并在其余参数中包含和声明
If (isNull(title)&&isNull(author)&&isNull(book_id)) return null;