Das ist nicht wirklich die Art, wie man eigentlich sind zu konstruieren und Führen Sie eine SQL INSERT-Abfrage mit Variablen aus. Dies ist nicht nur anfällig für SQL injection attacks, aber es ist auch ziemlich .. umständlich;) Möglicherweise enthielt ein Wert eine einzelne Zahl und verursacht Ihre Abfrage syntaktisch ungültig.
Nur String-verketten Variablen in eine SQL-Zeichenfolge. Verwenden Sie stattdessen PreparedStatement
(tutorial here) in Kombination mit ?
als Platzhalter für die Variable in der SQL-Zeichenfolge. Auf diese Weise können Sie vollwertige Java-Objekte (einschließlich Date
und InputStream
!) In eine SQL-Anweisung von Wertindex einfügen, ohne sich Gedanken über Zeichen in Strings zu machen, die die SQL-Abfrage syntaktisch brechen (und damit auch SQL-Injection-Risiken induzieren).
hier ein Kickoff Beispiel ist auf der Grundlage Ihrer ursprünglichen SQL-Abfrage:
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();
}
}
Um mehr über die Verwendung Grund JDBC die richtige Art und Weise zu lernen, können Sie this article nützlich finden.
Hoffe, das hilft.
Dies ist die schlechteste Möglichkeit, mit SQL-Anweisungen in Java zu arbeiten. Siehe die Antwort von BalusC für den richtigen Weg. –