【问题标题】:Mysql query returning unknown column in java. Using intellijMysql 查询在 java 中返回未知列。使用智能
【发布时间】:2020-04-08 05:21:36
【问题描述】:

代码:

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'

【问题讨论】:

    标签: java mysql intellij-idea


    【解决方案1】:

    去掉单引号:

    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'''
    

    因为executeUpdate() 转义通过在开头和结尾再添加 2 个单引号,这被解释为列名/别名 'test1' 而不是字符串文字。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 2015-03-27
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多