Ich habe mich gefragt, ob es eine elegantere Möglichkeit gibt, IN () - Abfragen mit Spring's JDBCTemplate durchzuführen. Momentan mache ich so etwas:
StringBuilder jobTypeInClauseBuilder = new StringBuilder();
for(int i = 0; i < jobTypes.length; i++) {
Type jobType = jobTypes[i];
if(i != 0) {
jobTypeInClauseBuilder.append(',');
}
jobTypeInClauseBuilder.append(jobType.convert());
}
Das ist ziemlich schmerzhaft, da ich nur neun Zeilen habe, um die Klausel für die IN () - Abfrage zu erstellen. Ich hätte gerne so etwas wie die Parametersubstitution von vorbereiteten Anweisungen
WHERE NOT EXISTS (SELECT ...)
.Ich mache die "in Klausel" Abfrage mit spring jdbc wie folgt:
quelle
Wenn Sie eine Ausnahme erhalten für: Ungültiger Spaltentyp
Bitte verwenden Sie
getNamedParameterJdbcTemplate()
anstelle vongetJdbcTemplate()
Beachten Sie, dass die beiden zweiten Argumente vertauscht werden.
quelle
Siehe hier
Abfrage mit benanntem Parameter schreiben, einfach
ListPreparedStatementSetter
mit allen Parametern nacheinander verwenden. Fügen Sie einfach das folgende Snippet hinzu, um die Abfrage in traditioneller Form basierend auf den verfügbaren Parametern zu konvertieren.quelle
Viele Dinge haben sich seit 2009 geändert, aber ich kann nur Antworten finden, die besagen, dass Sie NamedParametersJDBCTemplate verwenden müssen.
Bei mir funktioniert es, wenn ich nur eine mache
Verwenden von SimpleJDBCTemplate oder JDBCTemplate
quelle
listeParamsForInClause
nicht maskiert wird und Sie für SQL-Injection anfällig sind.