首页 > 解决方案 > 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'

标签: javamysqlintellij-idea

解决方案


删除单引号:

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'单引号,这被解释为列名/别名而不是字符串文字。


推荐阅读