C
Camino
Gast
Hallo,
ich dachte schon, ich hätte mir eine schöne Lösung geschrieben, mit der ich über eine Methode PreparedStatements ausführen kann. Diese Methode habe ich in einer DBHandler-Klasse, auf die ich aus anderen Klassen zugreife und die Parameter übergebe. Aber jetzt ist ein Problem aufgetreten, weil einer der Werte/Objekte null ist.
Und zwar hab ich folgende Methode:
Das heisst, ich übergebe dieser Methode den SQL-String für das PreparedStatement und ein Object[ ] values mit den Werten für das PreparedStatement.
Der SQL-String sieht etwa so aus:
In der Methode gehe ich dann durch den Object-Array durch und schaue, welcher Typ das Object ist und setze es dementsprechend in das PreparedStatement.
Ist der Wert aber null, gibt es ein Problem, weil ja kein Objekt-Typ bekannt ist. Es gibt zwar die Möglichkeit mit setNull(), aber dafür bräuchte ich ja auch die Typangabe.
Jetzt weiss ich leider gerade nicht mehr weiter. Gibt es die Möglichkeit, diese Methode weiterhin zu nutzen und auch einen null-Wert irgendwie abzufangen? War halt ziemlich praktisch, weil ich diese Methode so für mehrere unterschiedliche Fälle universell einsetzen konnte. Oder muss ich dass zusammensetzen des PreparedStatements für jeden Fall, den ich habe, separat machen?
Ich hoffe, ich hab mein Problem einigermassen verständlich beschrieben. Vielleicht habt ihr ja Tipps, wie ihr das macht.
ich dachte schon, ich hätte mir eine schöne Lösung geschrieben, mit der ich über eine Methode PreparedStatements ausführen kann. Diese Methode habe ich in einer DBHandler-Klasse, auf die ich aus anderen Klassen zugreife und die Parameter übergebe. Aber jetzt ist ein Problem aufgetreten, weil einer der Werte/Objekte null ist.
Und zwar hab ich folgende Methode:
Java:
...
protected void executeSQL2( String sql, Object[] values ) {
PreparedStatement st = null;
int z = 1;
// DB-Verbindung holen
Connection conn = DBConnection.getInstance();
try {
st = conn.prepareStatement( sql );
for( Object obj : values ) {
if ( Integer.class.isInstance(obj) ) {
st.setInt( z, (Integer)obj );
}
if ( Double.class.isInstance(obj) ) {
st.setDouble( z, (Double)obj );
}
if ( String.class.isInstance(obj) ) {
st.setString( z, (String)obj );
}
if ( Boolean.class.isInstance(obj) ) {
st.setBoolean( z, (Boolean)obj );
}
if ( BigDecimal.class.isInstance(obj) ) {
st.setBigDecimal( z, (BigDecimal)obj );
}
if ( GregorianCalendar.class.isInstance(obj) ) {
st.setTimestamp( z, new Timestamp( ((GregorianCalendar)obj).getTimeInMillis() ) );
}
if ( Date.class.isInstance(obj) ) {
st.setDate( z, (Date)obj );
}
System.out.print( obj + " " );
z++;
}
st.executeUpdate();
st.close();
} catch ( SQLException e ) {
e.printStackTrace();
}
...
Das heisst, ich übergebe dieser Methode den SQL-String für das PreparedStatement und ein Object[ ] values mit den Werten für das PreparedStatement.
Der SQL-String sieht etwa so aus:
Java:
String sql = "INSERT INTO person VALUES " +
"(DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DEFAULT, " +
"?, DEFAULT, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
Ist der Wert aber null, gibt es ein Problem, weil ja kein Objekt-Typ bekannt ist. Es gibt zwar die Möglichkeit mit setNull(), aber dafür bräuchte ich ja auch die Typangabe.
Jetzt weiss ich leider gerade nicht mehr weiter. Gibt es die Möglichkeit, diese Methode weiterhin zu nutzen und auch einen null-Wert irgendwie abzufangen? War halt ziemlich praktisch, weil ich diese Methode so für mehrere unterschiedliche Fälle universell einsetzen konnte. Oder muss ich dass zusammensetzen des PreparedStatements für jeden Fall, den ich habe, separat machen?
Ich hoffe, ich hab mein Problem einigermassen verständlich beschrieben. Vielleicht habt ihr ja Tipps, wie ihr das macht.