【问题标题】:Unknown column error in where clause, using MySQL and Javawhere 子句中的未知列错误,使用 MySQL 和 Java
【发布时间】:2014-07-31 12:32:02
【问题描述】:
以下是我的代码行:
ResultSet rs3 = stmt6.executeQuery("SELECT * FROM ShopSystem.Order where s_id="+s_id+" AND status="+Pending);
我收到以下错误:
Unknown column 'Pending' in 'where clause'
可能是什么原因...我无法通过它..
【问题讨论】:
标签:
java
mysql
sql
connection
database-connection
【解决方案1】:
毫无疑问,status 是一个字符串,所以需要与字符串进行比较。使用分隔符:
SELECT * FROM ShopSystem.Order where s_id="+s_id+" AND status='"+Pending+"'"
或者更好的是,学习如何编写使用参数替换将参数值放入 SQL 字符串的代码。
【解决方案2】:
改成
AND status = '" + Pending + "'"
您需要将字符串放在引号中。否则数据库会认为你的意思是列名。
但实际上你应该使用Prepared Statements。然后你不需要像这样将查询修补在一起,你也不用担心参数和转义它们......
【解决方案3】:
不要串联!使用准备好的语句
PreparedStatement stm = conn.prepareStatement("SELECT * FROM ShopSystem.Order where s_id = ? AND status = ?");
stm.setInt(1, s_id);
stm.setString(2, Pending.name());
ResultSet rs = stm.executeQuery();
【解决方案4】:
在这种情况下你必须使用 PreparedStatement
// use the ? for the 2 entries values
String selectSQL = new String("SELECT * FROM ShopSystem.Order where s_id=? AND status=?")
preparedStatement = dbConnection.prepareStatement(selectSQL);
// in order you must incialise them here
preparedStatement.setString(1, "s_id");
preparedStatement.setString(2, "Pending");
//execute your resultset `enter code here`
ResultSet rs = preparedStatement.executeQuery();