-1

我将以下字符串传递给执行插入的方法,但是每次尝试执行此操作时,都会出现错误。

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

错误

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

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

5 回答 5

4

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

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

很可能,它的末尾会有一个撇号。然后是从源头向后追溯以查看该变量在何处/如何更改的问题。

于 2012-03-09T21:39:53.660 回答
4

我想你只是多了一个逗号。尝试

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

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

于 2012-03-09T21:43:21.340 回答
1

A) 那不是有效的 SQL。您有,以下内容-在使用 JDBC 时,(Image_ImageID, Props_PropID)您也不会以 a 结束语句。;

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

于 2012-03-09T21:47:12.233 回答
1

末尾的额外 ' 只是整个 select 语法的引号,匹配 SELECT 之前的那个。我认为 SELECT, SELECT 1, PropID" 1 是列名之后有错误吗?

于 2012-03-09T21:42:31.120 回答
1

我认为这个语句的问题在于你SELECT 1的 sql 语句中有一个,当它不是你的表中的列名时,以及这里的其他人提到的和语句,之间的中间。INSERTSELECT

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

1:您试图从表中获取 ImageID,这是一列,在这种情况下,您会想要类似的东西:

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

或者

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

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

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

于 2012-03-09T22:02:07.090 回答