Lütfen Yardım ve değişkenlerle bir SQL INSERT sorgusu yürütür. Bu sadece SQL injection attacks için eğilimli değil, aynı zamanda güzel .. hantal;) Muhtemelen bir değer bir singlequote içeriyor ve sorgunuzun sözdizimsel olarak geçersiz olmasına neden oldu.
Sadece değişkenleri bir SQL dizesine dizgileyeyle birleştirmeyin. Bunun yerine, ?
ile birlikte SQL dizesindeki değişkenin yer tutucusu olarak PreparedStatement
(tutorial here) kullanın. Bu şekilde, SQL sorgusunu sözdizimsel olarak bozabilecek (ve dolayısıyla SQL enjeksiyon risklerini de indükleyebilecek) karakter dizileriyle ilgili endişe duymadan, tam bir Java nesnesini (Date
ve InputStream
dahil!) Bir SQL deyiminde değer dizinine ekleyebilirsiniz.
bölümde, orijinal SQL sorgusunun dayalı bir başlama örnek:
private static final String SQL_INSERT = "INSERT INTO CURRENT_WEATHER_US"
+ " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
public void create(String cityCode, Weather weather) throws SQLException {
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
) {
statement.setString(1, cityCode);
statement.setString(2, weather.getCity());
statement.setString(3, weather.getRegion());
// ...
statement.setString(20, weather.getForecastCode());
statement.executeUpdate();
}
}
temel JDBC uygun şekilde kullanma hakkında daha fazla bilgi edinmek için, this article kullanışlı bulabilir.
Bu yardımcı olur umarım.
Bu, Java'daki SQL deyimleriyle çalışmak için en kötü yoldur. BalusC'nin cevabını doğru şekilde görün. –