我收到此异常
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);
}
}
答案 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;”,那么您可以使用它。