faecher:informatik:oberstufe:datenbanken:projekt:java_db:java_db_null:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:projekt:java_db:java_db_null:start [02.04.2025 16:52] – [Verarbeitung mit Java] Frank Schiebelfaecher:informatik:oberstufe:datenbanken:projekt:java_db:java_db_null:start [03.04.2025 20:36] (aktuell) – [Warum ist das wichtig?] Frank Schiebel
Zeile 21: Zeile 21:
 Wenn eine Spalte der Datenbank einen ''NULL''-Wert enthält, liefert die get-Methode von Java dort den Default-Wert des Datentyps zurück. Für Integer-Werte ist das 0, für Strings ''null'' (das "Java" ''null''). Wenn eine Spalte der Datenbank einen ''NULL''-Wert enthält, liefert die get-Methode von Java dort den Default-Wert des Datentyps zurück. Für Integer-Werte ist das 0, für Strings ''null'' (das "Java" ''null'').
  
-**Man kann bei Integer Variablen als nicht mehr unterscheiden, ob das Datenbankfeld tatsächlich den Wert 0 enthalten hat** oder in der Datenbank keine Daten vorhanden waren, also ein NULL-Wert ausgelesen wurde, der dann zu einer 0 in der Java Variablen wurde.+**Man kann bei Integer Variablen also nicht mehr unterscheiden, ob das Datenbankfeld tatsächlich den Wert 0 enthalten hat** oder in der Datenbank keine Daten vorhanden waren, also ein NULL-Wert ausgelesen wurde, der dann zu einer 0 in der Java Variablen wurde. 
 + 
 +Um NULL von 0 unterscheiden zu können, gibt es in der Klasse ''ResultSet'' die Methode ''wasNull(): boolean''. Sie gibt an, ob der zuletzt gelesene Wert ein NULL-Wert war oder nicht: 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:projekt:java_db:java_db_null:wasnull.png |}} 
 + 
 +Man könnte jetzt also so etwas tun, um das Problem zu umgehen, und den NULL_wert aus der Datenbank in die Java-Variable zu überführen:  
 + 
 +<code java> 
 +[...] 
 +int wert = rs.getInt(3);         // → 0, aber in der DB NULL! 
 +boolean wasnull = rs.wasNull();  // → true 
 +if(wasnull) { 
 +  wert = null; 
 +
 +[...] 
 +</code> 
 + 
 +Allerdings klappt das bei den primitiven Datentypen wie  wie ''int'', ''char'', ''double'' u.ä. nicht, da diese keine Objekte sind und darum nicht ''null'' sein können. 
 + 
 +Aus diesem Grund muss man bei den primitiven Datentypen die entsprechenden [[faecher:informatik:oberstufe:java:algorithmen:assoziative_arrays:start#anmerkung_zu_wrapper-klassen|Wrapper-Klassen]] verwenden - also ''Integer'', ''Character'', ''Double'' und Co. 
 + 
 +Eine **korrekte Variante** sieht also so aus: 
 + 
 +<code java> 
 +[...] 
 +Integer wert = rs.getInt(3);   // → 0, aber in der DB NULL! 
 +if(rs.wasNull()) { 
 +  wert = null; 
 +
 +[...] 
 +</code> 
 + 
 +===== Warum ist das wichtig? ===== 
 + 
 +Wenn man die Werte die in einer Datenbank gespeichert sind ausgeben oder verändern möchte, ist es wichtig, zu unterscheiden, ob ein Information nicht vorhanden war oder obn der Wert 0 in der Datenbank gespeichert war. wenn man beispielsweise die Textfelder einer GUI mit werten aus eine Datenbank befüllen möchte, könnte das so aussehen: 
 + 
 +<code java> 
 +ResultSet rs = stm.executeQuery("…"); 
 +rs.next(); 
 + 
 +Integer x = rs.getInt(1); 
 +if (rs.wasNull()) x = null; 
 + 
 +[…] 
 + 
 +if (x == null) { 
 +  textBox1.setText("Kein Wert in der DB vorhanden"); 
 +} else { 
 +  textBox1.setText(x.toString()); 
 +
 +</code> 
 + 
 +===== Material ===== 
 +  
 + 
 +[[https://slides.info-bw.de/fs-wiki-java-db-03/|Präsentation - NULL-Werte]] [[https://slides.info-bw.de/fs-wiki-java-db-03/?print-pdf|(PDF)]]((Link öffnen, dann aus dem Browser in ein PDF drucken)) 
  • faecher/informatik/oberstufe/datenbanken/projekt/java_db/java_db_null/start.1743612740.txt.gz
  • Zuletzt geändert: 02.04.2025 16:52
  • von Frank Schiebel