【问题标题】:Search in database with like operator and return list of results使用 like 运算符在数据库中搜索并返回结果列表
【发布时间】:2023-03-06 06:10:01
【问题描述】:

这是我搜索特定字符串的方法:

(我想在书名表中搜索)

private static String searchInDB(String keyword) {
    String url = "jdbc:mysql://localhost/bookstore";
    String query = "Select title from books where title like %?% ";
    try {
        Connection connection = DriverManager.getConnection(...);
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setString(1, keyword);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            return rs.getString("title");
        }
    } catch (SQLException sqle) {
        sqle.printStackTrace();

    }
    return null;
}

但是当我调用这个方法时:

System.out.println(searchInDB("so"));

结果中有异常:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which 
is 0).
null
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
...

更新

我添加此代码以获得所有结果,但我进入了一个具有相同值的不定式循环!

String result = searchInDB("so");
    while (result != null) {
        System.out.println(result);
    }

【问题讨论】:

    标签: mysql jdbc sql-like


    【解决方案1】:

    更改代码,使通配符包含在参数中,而不是在查询中,即:

    String query = "Select title from books where title like ?";
    ....
    ps.setString(1, "%" + keyword + "%");
    

    编辑关于,其他问题

    AFAIK Java 没有yield return 功能,因此您需要更改方法签名。 目前,您正在返回第一个结果,然后永远不会返回该函数。

    我的 Java 很基础,但是怎么样:

    private static List<String> searchInDB(String keyword) {
        List<String> theStrings = new List<String>();
        String url = "jdbc:mysql://localhost/bookstore";
        String query = "Select title from books where title like %?% ";
        try {
            Connection connection = DriverManager.getConnection(...);
            PreparedStatement ps = connection.prepareStatement(query);
            ps.setString(1, keyword);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                theStrings.Add(rs.getString("title"));
            }
        } catch (SQLException sqle) {
            sqle.printStackTrace();
    
        }
        return theStrings ;
    }
    

    【讨论】:

    • 我相信你的意思是if (result != null)
    • 我尝试if(result !=null),但它只返回一个值,但 DBMS 结果中有多个值。
    • @user3808021 我已经更新了 - 你需要返回一个字符串集合
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2017-11-09
    • 2012-09-20
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2019-08-24
    • 2021-12-11
    相关资源
    最近更新 更多