我想根据存储在变量(supp_rec
数组)中的值从数据库中选择一些行。我使用过类似的帖子/问题提示。但是,我仍然有一些错误消息。代码段如下:
waiting_time = dbMngr.runQuery( "SELECT " + "ExpectedWaitingTime" + " FROM Student" + "where deptID = '" + supp_rec[1] + "' and weight = '" + supp_rec[2] + "'");
prob = PoisonModel(Phase3GUI.existence_time - Long.parseLong(waiting_time[0]),2,Phase3GUI.existence_time);
if (prob > 0.5)
{
dbMngr.execUpdate( "DELETE " + " FROM Student" + "where deptID NOT IN" + supp_rec[1] + " and weight NOT IN" + supp_rec[2]);
}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
错误信息如下:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'deptID NOT IN1 and weight NOT IN8' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1' and weight = '8'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
请相信如何解决这些错误的任何帮助。谢谢。
答案 0 :(得分:1)
mysql错误消息是
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,用于在'deptID NOT附近使用正确的语法 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(原生方法)的第1行 IN1 和权重不是 IN8 '
因此,如果没有空格,mysql会尝试解析 IN1 作为其语法和语言的一部分。因此查询失败。它应该是 IN 1 ,其中 IN 是有效的SQL令牌。
要更正此问题,请在语句
中的 IN 之后添加空格dbMngr.execUpdate( "DELETE " + " FROM Student" + "where deptID NOT IN " + supp_rec[1] + " and weight NOT IN " + supp_rec[2]);
编辑:注意到您为 NOT IN 传递了一个值。在这种情况下,它应该只是!= 运算符。
dbMngr.execUpdate( "DELETE " + " FROM Student" + "where deptID != " + supp_rec[1] + " and weight != " + supp_rec[2]);
答案 1 :(得分:1)
在变量内容,它们之间的空格和格式化之间添加了()
dbMngr.execUpdate(String.format("DELETE FROM Student WHERE deptID NOT IN (%s) and weight NOT IN (%s)", supp_rec[1], supp_rec[2]));
另外,这对您来说风险很大,而不是对SQL Injections使用保护
答案 2 :(得分:0)
你应该使用PreparedStatement。 SQL将更容易阅读,您将避免大多数这些问题。