C
Camino
Gast
Hallo,
ich hab in meiner Anwendung den Zugriff auf die Datenbank-Tabellen bisher über SQL-Anweisungen gemacht und wollte nun auf PreparedStatements umsteigen. Dazu hab ich eine Methode, die vorher nur den SQL-Code übergeben bekommen hat, ein bisschen angepasst:
Ich übergeb der Methode jetzt einmal einen String für das PreparedStatement:
und ein Array Object[] values, in welchem die Werte gespeichert sind, welche die ? im Statement ersetzen sollen. In meiner Methode frage ich die Objekte in einer Schleife nach ihrer Klasse (Integer oder String) ab, erhöhe den Zähler z für den Parameter im PreparedStatement und nach der Schleife wird mit
das Statement ausgeführt.
Mein Array Object[] values sieht so aus:
Doch nun bekomme ich immer die Fehlermeldung:
Obwohl ich int z am Anfang auf 1 gesetzt habe und es in der Schleife hochzähle. Eine Testausgabe auf der Konsole hat mir z auch richtig hochgezählt.
Evtl. könnte es an dem DEFAULT legen. Wenn ich dort stattdessen eine Zahl (0 oder 1) eingebe, bekomme ich die gleiche Fehlermeldung. Wenn ich null eingebe, bekomme ich eine NPE.
Ich weiss nun nicht mehr weiter und bräuchte mal Hilfe. Hab ich irgendwas vergessen oder falsch geschrieben?
Viele Grüsse
Camino
ich hab in meiner Anwendung den Zugriff auf die Datenbank-Tabellen bisher über SQL-Anweisungen gemacht und wollte nun auf PreparedStatements umsteigen. Dazu hab ich eine Methode, die vorher nur den SQL-Code übergeben bekommen hat, ein bisschen angepasst:
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( obj.getClass().isInstance( Integer.class ) )
st.setInt( z, (Integer)obj);
if( obj.getClass().isInstance( String.class ) )
st.setString( z, (String)obj);
z++;
}
st.executeUpdate();
st.close();
} catch ( SQLException e ) {
e.printStackTrace();
}
}
Java:
String sql = "INSERT INTO anmerkungen (anmerkung_id, stamm_id, user_id, text, zeitstempel) values (DEFAULT, ?, ?, ?, ?);";
Code:
st.executeUpdate()
Mein Array Object[] values sieht so aus:
Java:
Object[] values = { new Integer(anmerkung.getPersonID()), new Integer(anmerkung.getUserID()),
new String(anmerkung.getText()), new String(timestamp) };
Doch nun bekomme ich immer die Fehlermeldung:
Code:
org.postgresql.util.PSQLException: Für den Parameter 1 wurde kein Wert angegeben.
Evtl. könnte es an dem DEFAULT legen. Wenn ich dort stattdessen eine Zahl (0 oder 1) eingebe, bekomme ich die gleiche Fehlermeldung. Wenn ich null eingebe, bekomme ich eine NPE.
Ich weiss nun nicht mehr weiter und bräuchte mal Hilfe. Hab ich irgendwas vergessen oder falsch geschrieben?
Viele Grüsse
Camino