java - Mysql 查询在 java 中返回未知列。使用智能
问题描述
编码:
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/smtp_program","root","xxxx");
PreparedStatement stmt =
con.prepareStatement("DELETE FROM smtp_program.users WHERE username=?");
stmt.setString(1,"'"+user+"'");
stmt.executeUpdate();
} catch (Exception e) {
System.out.println(e);
}
变量用户作为字符串传入。
返回错误:[42S22][1054] 'where 子句'中的未知列'test1'
解决方案
删除单引号:
stmt.setString(1, user);
不需要引号,因为executeUpdate()
将通过检查参数的类型来正确修复语句,并且由于您使用setString()
了最终语句,因此最终语句将包含test1
在单引号内:
DELETE FROM smtp_program.users WHERE username='test1'
您的代码传递'test1'
给setString()
,结果是:
DELETE FROM smtp_program.users WHERE username='''test1'''
因为通过在开头和结尾再添加 2 个来executeUpdate()
转义'test1'
单引号,这被解释为列名/别名而不是字符串文字。
推荐阅读
- sql - 仅当 3 列的值相同时才返回行
- regex - Notepad++ 正则表达式:如何防止 notepad++ 在搜索中嵌入不需要的字符?
- php - 是否可以在没有作曲家的情况下使用 php 电子表格?
- javascript - 从 useRef() 获取输入值时获取 useState 是滞后的
- php - PHP-FPM 与 PHP 中的不同语言环境
- python - 为什么在子级上使用打印时调用父类的__str__函数
- scala - 使用 Scala Spark 在不同组中计算复杂统计数据的困难
- java - 使用 spring boot / thymyleaf 重定向到 HTML 页面
- go - 是自定义命名类型的转换函数还是语言构造
- android - 启动阻塞 GC Alloc / 等待阻塞 GC Alloc