You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:07