JDBC + Java Query执行错误

时间:2009-08-18 18:44:51

标签: java jdbc

我收到此异常

java.sql.SQLException: Unknown column 'auyu' in 'where clause'

我的数据库外观类中的查询和方法。

db.save("delete from users where name = auyu");

public static void save(String sql) throws Exception {
        new DBFacade().connect();
        synchronized (c) {
            c.createStatement().executeUpdate(sql);
        }
}

3 个答案:

答案 0 :(得分:6)

我怀疑你的意思是:

delete from users where name = 'auyu'

这仍然是一个非常奇怪的SQL命令,可以提供“保存”方法。

我还强烈建议您使用参数化SQL语句,而不是直接将数据嵌入到SQL本身 - 特别是如果数据来自用户。

答案 1 :(得分:2)

你需要围绕auya('auyu')的单引号,你需要像这样逃避它们:

"delete from users where name = \'auyu\'"

答案 2 :(得分:2)

+1给Jon Skeet的回答。扩展并且可能会转向OT,但最好对这些内容进行参数化并确保转义,以免您受到SQL注入攻击。 E.g:

public static void deleteUser(userName)
throws Exception
{
    PreparedStatement ps;

    new DBFacade().connect();
    // (Assuming 'c' is a connection that's in scope somehow)
    synchronized (c) {
        // (You'd want to cache the prepared statement in an appropriate
        // way related to how you're handling connections and pooling)
        ps = c.prepareStatement("delete from users where name = ?");
        ps.setString(1, userName);
        ps.executeUpdate();
    }
}

否则,如果用户提供的名称类似于“anyu'; drop table users;”,那么您可以使用它。