SQL を構築するコードを見て SQL をデバッグしようとするのは困難です。
String sql = "INSERT INTO `ad`.`ad` (`imgURL`, `linkURL`, `client`, `idx`) VALUES ("
+ a.getImgURL() + " , " + a.getLinkURL() + " , " + a.getClient() + " , "
+ a.getIdx() + ");";
sql
代わりに、結果の文字列を調べます。
INSERT INTO `ad`.`ad` (`imgURL`, `linkURL`, `client`, `idx`) VALUES (fooURL, ...);
引用符で囲まれていないSQL を見ると、より簡単に確認できるはずですfooURL
。したがって、単純なスカラー文字列値ではなく、式として解釈されます。単一の単語の式は列名であると見なされますが、その名前の列は ad テーブルに存在しません。
文字列を SQL ステートメントに補間することは避けたほうがはるかによいでしょう。 代わりに、準備されたクエリとクエリ パラメーターを使用する方法を学習してください。
String sql = "INSERT INTO `ad`.`ad` (`imgURL`, `linkURL`, `client`, `idx`) "
+ " VALUES (?, ?, ?, ?)";
PreparedStatement insertAd = con.prepareStatement(sql);
insertAd.setString(1, a.getImgUrl);
insertAd.setString(2, a.getLinkUrl);
insertAd.setInt(3, a.getClient);
insertAd.setInt(4, a.getIdx);
insertAd.executeUpdate();
クエリ パラメータを引用またはエスケープする必要はありません。バランスの取れた引用符がどこにあるかを覚えておくよりも、パラメーターを使用する方がはるかに簡単です。そのため、正しく行う可能性が高くなるため、安全性も高くなります。