MySQL PreparedStatements: int null

oetzi

Bekanntes Mitglied
Hallo zusammen,

bis vor kurzem habe ich noch ganz gemeingefährlich sowas in meinem Code stehen gehabt:
"INSERT INTO `tablleX` VALUES (" + id +", " + sonstWas + "," + wasOptionales +")";

Hierbei war es egal, ob in wasOptionales was drin stand oder die Variable null war. Es wurde halt das eine oder das andere in die Tabelle geschrieben (Die Spalte ist logischerweise nullable).

Auf Nummer Sicher gehen wollend habe ich die ganzen Statements in PreparedStatements umgewandelt. Also...
INSERT INTO `tablleX` VALUES (?, ?, ?)
Das Problem:
Wenn jetzt z. B. stmt.setInt(3, null) ausgeführt wird, schmeißt der mir eine NullPointer Exception.

Meine Frage ist jetzt:
Muss ich jetzt jedes nullable Feld mit if/else überprüfen um dann ggf. mit setNull() zu arbeiten oder gibt es dafür nicht eine schicke Lösung?
Das wäre auf jeden Fall ganz schön viel Arbeit den kompletten Code deswegen jetzt überarbeiten zu müssen...

Schönen Gruß
oetzi
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
es gibt in der Java-API für PreparedStatement
PreparedStatement (Java Platform SE 6)
nur eine Methode setInt() und die erwartet einen einfachen int als Parameter

ist bei dir Autoboxing Schuld? du musst wohl einen normalen int-Wert übergeben, z.B. 0,
was passiert bei setObject(null bzw. sonst deine Integer-Objekte)?
 

tfa

Top Contributor
Ich tippe auch auf ein Boxing-Problem.
Es gibt auch noch die Methode PreparedStatement.setNull(int parameterIndex, int sqlType), möglicherweise hilft die.
 

oetzi

Bekanntes Mitglied
@SlaterB: Danke für die schnelle Antwort!

Mit setObject() scheint es (zumindest in dem einen Fall) tatsächlich zu funktionieren.

Mir wird nur irgendwie der Sinn nicht ganz klar.
Kann man einfach immer setObject benutzen, oder hat das irgendwelche Nebenwirkungen?

Mir ist gerade zufällig aufgefallen, dass das ganze bei setString(x,null) sowieso kein Problem ist, da setString ein Objekt erwartet, dass offensichtlich null sein kann. Sehr merkwürdig, dass für setInt dann ein primitiver Datentyp verwendet worden ist!?


Wie kommt ihr eigentlich auf ein Boxing Problem? Es geht doch um null Werte.


@tfa: setNull() kann ich aber nur verwenden, wenn der Wert in der DB immer null sein soll
 

oetzi

Bekanntes Mitglied
Genau :)

Aber warum nutzt man nicht einfach nur Objekte? Dann gäb es solche Probleme gar nicht erst.

Und noch mal die Frage: Kann man einfach überall setObject() verwenden, oder hat das gegenüber den konkreten settern irgendwelche Nachteile?
 
S

SlaterB

Gast
überlege doch selber:
die Methode heißt setInt(int), jeder normale Mensch kommt da mit "int x = 4" an und setObject kann man dann kaum verwenden,
denn int ist kein Object
 

oetzi

Bekanntes Mitglied
So war die Frage nicht gemeint.

würde die Methode setInteger(Integer) lauten, könnte man ja sowohl mit einem int als auch einem Integer diese nutzen.
So wie sie aber aktuell ist geht das halt nicht und man muss sich Alternativen überlegen, wie z. B. setObject() zu nutzen.

Und darum noch mal die Frage :)
Hat setObject irgendwelche Nachteile? Sonst könnte ich es ja einfach überall nutzen (wo kein primitiver Datentyp verwendet wird ;-) ) und müsste mir keine Gedanken mehr machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HSQLDB Mehrere PreparedStatements ausführen Datenbankprogrammierung 3
N SQL-Injection verhindern OHNE PreparedStatements Datenbankprogrammierung 11
D mySQL emullierte PreparedStatements haben Fehler unter Last Datenbankprogrammierung 3
S PreparedStatements, Abfrageoptimierung unter MS Access Datenbankprogrammierung 5
M Problem mit Insert-Statements/ PreparedStatements Datenbankprogrammierung 6
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
P Herausfinden wann Query null zurück gibt? Datenbankprogrammierung 1
N DBUnit und null Datenbankprogrammierung 6
P Null Werte bei der Normalisierung Datenbankprogrammierung 2
Z ResultSet ist null warum? Datenbankprogrammierung 12
krgewb getDouble auch mit null möglich? Datenbankprogrammierung 2
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
zhermann Data truncation: Incorrect date value: 'null' for column Datenbankprogrammierung 31
I Datenbankverbindung Oracle DB klappt nicht - getConnection returned null Datenbankprogrammierung 8
M Derby/JavaDB einen Null-Wert in die Datenbank schreiben Datenbankprogrammierung 7
D Oracle NullPointerException bei select mit Null Values Datenbankprogrammierung 5
T IllegalArgumentException: Person[ id=null ] is not a known entity type.??? Datenbankprogrammierung 0
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
R JPA dynamisch auf NULL abfragen Datenbankprogrammierung 2
OnDemand LEFT JOIN id hat Null Datenbankprogrammierung 6
P executeQuery liefert null zurück Datenbankprogrammierung 5
P Datenbank- Abfrage mit null'en Datenbankprogrammierung 2
C PreparedStatement und null Datenbankprogrammierung 13
M HSQLDB EntityManager null? Datenbankprogrammierung 7
S Null Pointer exception statement Datenbankprogrammierung 8
M JPA NOT NULL Datenbankprogrammierung 11
E H2 - Datenbankabfrage gibt NULL aus? Datenbankprogrammierung 4
Q java.lang.NullPointerException connection = null Datenbankprogrammierung 13
C Metadata der SessionFactory immer null Datenbankprogrammierung 2
N Connection bleibt null Datenbankprogrammierung 7
F Derby/JavaDB Exception - Cannot accept Null Value (help) Datenbankprogrammierung 10
G MySQL Timestamp null Datenbankprogrammierung 2
H Fehler bei null-Datum in MySQL-DB Datenbankprogrammierung 2
G getConnection() liefert null Datenbankprogrammierung 3
A MSSQL - Spalten mit der Option: NULL zulassen Datenbankprogrammierung 2
G Hibernate oneToMany Not null Datenbankprogrammierung 4
S Update mit null Datenbankprogrammierung 11
H Date null = 30.11.0002? Datenbankprogrammierung 6
P Fehler: result-set zeigt auf null, aber warum Datenbankprogrammierung 4
R Warum ist meine Connection null? Datenbankprogrammierung 6
P Wie übergebe ich einen NULL Wert in meinem Java-Programm? Datenbankprogrammierung 7
W RsultSet auf null abfragen funktioniert nicht Datenbankprogrammierung 4
D hibernate + null + primitive Datentypen Datenbankprogrammierung 2
F MySQL gibt nur null zurück Datenbankprogrammierung 3
G NULL-data processing. Datenbankprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben