15 Datenbankverbindungen in Java

Werbung
150.422
15
Datenbanken – SQL Handout 10
Datenbankverbindungen in Java
• Installation •
Um in Java eine Verbindung zu einer MySQL Datenbank herstellen zu können, muss zunächst das
MySQL Connector jar File heruntergeladen und sichergestellt werden, dass die Java Installation dieses
File lädt.
• Abfragen an eine Datenbank schicken •
Der folgende Jave Code zeigt exemplarisch, wie eine Verbindung zur Datenbank aufgebaut, eine Abfrage
auf der Datenbank ausgeführt, und das Ergebnis ausgegeben wird.
1
import java . sql .*;
public class Select
{
public static void main ( String args []){
6
try {
Statement stmt ;
ResultSet rs ;
String s = " SELECT name , area FROM cia WHERE region = ‘ Europe ’" ;
11
// JDBC driver fuer MySQL registrieren
Class . forName ( " com . mysql . jdbc . Driver " );
// URL fuer Datenbank definieren
String url = " jdbc : mysql :/ /1 9 3. 17 1 .8 1 .2 08 : 33 0 6/ oracle1_00_cia " ;
16
// zu Datenbank verbinden
Connection con = DriverManager . getConnection (
url , " oracle00 " , " password " );
21
// Statement - Objekt setzen
stmt = con . createStatement ();
// Abfrage ausfuehren und Resultat in ResultSet - Objekt speichern
rs = stmt . executeQuery ( s );
26
// Resultat in Schleife auslesen
while ( rs . next () ){
String name = rs . getString ( " name " );
int area = rs . getInt ( 2 );
System . out . println ( name + " has an area of " + area + " km ^2 " );
}
31
// Verbindung schliessen
con . close ();
36
} catch ( Exception e ) {
System . out . println ( " Error " + e );
}
41
}
}
SS 2016
Java
Integer
float
double
boolean
String
Date
Time
Methode in ResultSet
getInt()
getFloat()
getDouble()
getBoolean()
getString()
getDate()
getTime()
MySQL Datentyp
INTEGER
REAL
FLOAT
BIT
CHAR/VARCHAR
DATE
TIME
Die Datenbankverbindung muss (für die Fehlerbehandlung) in eine try-catch-Umgebung eingebettet
werden. Im importierten Paket sql gibt es spezielle Klassen Connection, Statement und ResultSet.
Die Klasse Statement verfügt über Methoden, um Abfragen an die Datenbank zu senden, während das
Ergebnis der Abfrage in ein Objekt der Klasse ResultSet gespeichert werden kann.
In Zeile 20 wird die Verbindung zur Datenbank hergestellt. Dafür müssen die Daten für einen Login auf
die Datenbank angegeben werden. Die url muss die MySQL HostAddress, den Port sowie durch einen
Doppelpunkt getrennt den Namen der Datenbank beinhalten. Die Methode getconnection nimmt als
Parameter neben der url den Benutzernamen und das Passwort für den Login.
Die Abfrage wird im String s gespeichert und in Zeile 27 ausgeführt. Das Resultat wird im ResultSet rs
gespeichert. Um die Daten aus dem ResultSet auszulesen, wird eine Schleife verwendet (Zeilen 30–34).
Das ResultSet rs enthält die Ergebnistabelle der Abfrage, wobei allerdings jeweils nur eine aktuelle
Zeile dieser Tabelle ausgelesen werden kann. Die Methode next() überprüft, ob es noch eine Zeile
nach der aktuellen Zeile gibt und liest diese Zeile gegebenenfalls ein. Um auf die einzelnen Spalten
der aktuellen Zeile der Ergebnistabelle zugreifen zu können, müssen in Abhängigkeit vom Datentyp
der jeweiligen Spalte entsprechende Methoden getInt, getString usw. (siehe obige Tabelle) der Klasse
ResultSet verwendet werden. Als Parameter nehmen diese Methoden entweder den Namen oder die
Nummer der Spalte (in der Abfrage). (s. Zeilen 31 und 32). In Zeile 37 wird die Verbindung geschlossen.
Weitere Methoden und Klassen: Neben der Methode next() stellt die Klasse ResultSet noch weitere
Methoden wie previous(), first() oder last() zur Verfügung, mit denen im ResultSet navigiert werden kann. Die Methode wasNull() überprüft, ob der zuletzt eingelesene Wert NULL war oder nicht. Um
SQL Injections zu vermeiden (siehe z.B. http://sqlzoo.net/hack/ ), können auch sogenannte Prepared
Statements verwendet werden. Dazu finden Sie auf der Lehrveranstaltungsseite Beispiele.
• Updates, Inserts • und andere Abfragen, die kein ResultSet zurückgeben, funktionieren noch einfacher. Anstelle der Methode executeQuery(String s) wird die Methode executeUpdate(String s)
verwendet. Eine modifizierte main-Methode für ein Update sieht wie folgt aus:
public static void main ( String args []){
2
try {
// wie oben
...
7
String s = " UPDATE cia SET population = 8 E6 WHERE name = ‘ Austria ’" ;
stmt = con . createStatement ();
// Update ausfuehren
stmt . executeUpdate ( s );
12
con . close ();
} catch ( Exception e ) {
System . out . println ( " Error " + e );
}
17
}
Herunterladen