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:49] – [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 19: Zeile 19:
 } }
 </code> </code>
 +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 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.1743612568.txt.gz
  • Zuletzt geändert: 02.04.2025 16:49
  • von Frank Schiebel