mysql - 使用 like 运算符在数据库中搜索并返回结果列表

标签 mysql jdbc sql-like

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

(我想在书名表中搜索)

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);
    }

最佳答案

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

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

编辑 Re, 其他问题

据我所知,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 ;
}

关于mysql - 使用 like 运算符在数据库中搜索并返回结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783116/

相关文章:

mysql - Node.js ES6 类私有(private)存储

android - 在android中使用JDBC连接在mySQL上插入行的问题

Java SQL 问题

mysql - 如何将 MySQL 和 SQLite 连接到 Play Framework 2.2?

mysql - 如何在Mysql中使用MATCH AGAINST而不是LIKE

MYSQL - 如何从两个表中查找结果?

mysql - 无法将 365 kb sql 文件导入 WampServer 上的 phpmyadmin

mysql分组和排序而不使用最外面的order by

php - 如何添加数据库中的每条最后记录?例如。 1 += 1

MYSQL 选择 LIKE 并匹配空格