Java应用中quizzes表关键词查询无结果,求排查SQL写法问题
问题分析与解决方案
你的SQL语句确实存在引号使用错误,导致LIKE子句无法正确匹配目标内容。
错误原因
看你拼接的SQL语句:
ResultSet rs = stmt.executeQuery("SELECT * FROM quizzes WHERE testName =\"" + testName + "\" AND question LIKE '%\""+ word + "\"%';");
当word变量被拼入后,生成的实际SQL会变成类似这样:
SELECT * FROM quizzes WHERE testName = "某测试名" AND question LIKE '% "输入的单词" %';
问题出在你给word前后加了额外的双引号——数据库会去匹配包含"输入的单词"(带双引号)的question记录,但你的表中存储的question应该是不带这些双引号的,自然查不到结果。
修正后的拼接写法(临时解决)
去掉LIKE部分多余的双引号,改成这样:
ResultSet rs = stmt.executeQuery("SELECT * FROM quizzes WHERE testName =\"" + testName + "\" AND question LIKE '%" + word + "%';");
这样生成的SQL中,LIKE子句会变成'%输入的单词%',就能正确匹配包含目标单词的question了。
更安全的推荐做法:使用PreparedStatement
直接拼接字符串不仅容易出现这类语法错误,还会带来SQL注入的安全风险。建议使用PreparedStatement来参数化查询,既避免引号问题,又提升安全性:
String sql = "SELECT * FROM quizzes WHERE testName = ? AND question LIKE ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setString(1, testName); pstmt.setString(2, "%" + word + "%"); // 将%与参数拼接后传入 ResultSet rs = pstmt.executeQuery();
这种方式会由JDBC驱动自动处理字符串的引号转义,彻底避免语法错误和注入风险。
内容的提问来源于stack exchange,提问作者krystal
相关产品推荐
相关产品推荐

