在空的串的通配符

时间:2014-07-06 20:16:54

标签: java mysql

我正在创建一个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图片。

2 个答案:

答案 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;