SQL을 작성하는 코드를보고 SQL을 디버그하려고 시도하기가 어렵습니다.
INSERT INTO `ad`.`ad` (`imgURL`, `linkURL`, `client`, `idx`) VALUES (fooURL, ...);
당신은 당신이 당신의 fooURL
이 주위에 따옴표가없는 SQL 볼 때 더 쉽게 볼 수 있어야합니다 :
String sql = "INSERT INTO `ad`.`ad` (`imgURL`, `linkURL`, `client`, `idx`) VALUES ("
+ a.getImgURL() + " , " + a.getLinkURL() + " , " + a.getClient() + " , "
+ a.getIdx() + ");";
대신, 결과
sql
문자열을 검사합니다. 따라서 이것은 단순한 스칼라 문자열 값이 아니라 표현식으로 해석됩니다. 한 단어의 표현식은 단지 열 이름으로 간주되지만 광고 표의 해당 이름으로 그런 열은 없습니다.
문자열을 SQL 문에 삽입하는 것을 피하는 것이 훨씬 더 좋습니다. Learn how to use prepared queries and query parameters instead.
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();
당신은 인용 또는 쿼리 매개 변수를 탈출 할 필요가 없습니다. 균형 잡힌 따옴표가 어디에 있는지 기억하는 것보다 매개 변수를 사용하는 것이 훨씬 쉽습니다. 그리고 그 이유 때문에, 당신이 그것을 올바르게 할 가능성이 더 많으니까 더 안전합니다.
다시 한번 감사드립니다. @Perception – drewmoore