从Java插入数据库时​​出错

时间:2012-03-09 21:35:16

标签: java sql insert-select

我将以下字符串传递给一个执行Insert的方法,但是每次尝试这样做时,都会出错。

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID), SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';";

Error

你可以在错误中看到,似乎有一个额外的'之后它说血压监测器。我不知道这个额外的'来自哪里。我从JComboBox获得了StrPropDescription。

StrPropDescription = propChoice.getSelectedItem().toString();

5 个答案:

答案 0 :(得分:4)

首先,直接从用户输入生成sql语句是一件危险的事情!

其次,您可能希望在sql语句之前转储StrPropDescription的值,以确保它具有您认为应该具有的值。

可能,它最后会有一个撇号。然后,从源头向后追踪,看看变量在哪里/如何变化。

答案 1 :(得分:4)

我想你只是有一个额外的逗号。试试

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID) SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';";

请注意INSERT和SELECT之间没有逗号。

答案 2 :(得分:1)

最后的额外'只是围绕整个select语法的引用,与SELECT之前的语法匹配。我认为在SELECT,SELECT 1,PropID“1是列名?

之后有一个错误

答案 3 :(得分:1)

A)这不是有效的SQL。您有,跟随(Image_ImageID, Props_PropID) - 使用JDBC时,您也不会使用;结束语句。

B)您应该使用带有占位符的预准备语句,而不是将原始用户输入注入SQL语句。

答案 4 :(得分:1)

我认为这句话的问题在于你的sql语句中有SELECT 1,当你的表中没有列名时,,INSERT之间和其他人在这里提到的SELECT陈述。

我不完全确定你的IntImageID变量在这种情况下的用途,但我猜你正试图做两件事之一。

1:你正试图从表中获取ImageID,这是一个列,在这种情况下,你会想要这样的东西:

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID)
             SELECT ImageID, PropID FROM Props 
             WHERE PropDescription = '"+StrPropDescription+"'";

OR

2:您尝试将IntImageID作为第一个插入值,第二个值从数据库中提取,在这种情况下,它将类似于以下内容:

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID)
             ("+IntImageID+", SELECT ImageID, PropID FROM Props 
             WHERE PropDescription = '"+StrPropDescription+"')";

我不完全确定我是否正确编写了第二个,因为我无法测试它,但基本上,它涉及将IntImageID变量与SELECT语句分开,如果它不在数据库表中。