-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

このステートメントの問題はSELECT 1、SQLステートメントにが含まれていることです。これは、テーブルの列名ではなく、ここで他の人が言及しているように、ステートメントとステートメント,の間にあります。INSERTSELECT

このコンテキストでの変数の目的については完全IntImageIDにはわかりませんが、2つのことのいずれかを実行しようとしていると思います。

1:列であるテーブルからImageIDを取得しようとしています。この場合、次のようなものが必要になります。

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

また

2:最初の挿入値として入力しようとしてIntImageIDいて、2番目の値がデータベースから取得されます。この場合、次のようになります。

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

テストできないため、2番目の変数を正しく記述したかどうかは完全にはわかりませんが、基本的に、データベーステーブルにない場合は、INTImageID変数をSELECTステートメントとは別にする必要があります。

于 2012-03-09T22:02:07.090 に答える
1

最後の余分な'は、SELECT構文全体の引用符であり、SELECTの前のものと一致します。SELECT、SELECT 1、PropIDの後にエラーがあると思います "1は列名ですか?

于 2012-03-09T21:42:31.120 に答える
1

A)それは有効なSQLではありません。,次のものがあります-JDBCを使用する場合(Image_ImageID, Props_PropID)は、ステートメントをaで終了しないでください;

B)SQLステートメントに生のユーザー入力を挿入するのではなく、プレースホルダー付きのプリペアドステートメントを使用する必要があります。

于 2012-03-09T21:47:12.233 に答える