JDBC in 5 Schritten

Werbung
JDBC
JDBC in 5 Schritten
JDBC (Java Database Connectivity) ist eine Sammlung von Klassen und
Schnittstellen, mit deren Hilfe man Verbindungen zwischen Javaprogrammen
und Datenbanken herstellen kann.
1
Einrichten Treiberverbindung
Es kann z.B. eine ODBC-Treiberverbindung eingerichtet werden, damit das
JAVA-Programm auf eine ACCESS-DB zugreifen kann.
Folgende Schritte sind nun unter Windows durchzuführen :
(1) Öffnen des Ordners SYSTEMSTEUERUNG
(START/EINSTELLUNGEN/SYSTEMSTEUERUNG)
(2) Doppelklicken auf das Symbol 32-Bit-ODBC.
(3) Im Dialogfeld DATENQUELLEN auf den Schalter HINZUFÜGEN klicken.
(4) Im Dialogfeld DATENQUELLEN HINZUFÜGEN wählen Sie den
Microsoft Access-Treiber aus und klicken auf OK. Wird der Treiber im
Listenfeld nicht aufgeführt, ist er nicht korrekt unter Windows installiert.
(5) Geben Sie einen Namen für die neue Treiberverbindung ein.
(6) Legen Sie fest, auf welche Datenbank die Treiberverbindung zugreifen soll.
Klicken Sie dazu auf den Schalter AUSWÄHLEN und wählen Sie Ihre
Datenbank aus.
Achtung : Datenbank und zuvor gewählter Treiber müssen natürlich zueinander passen.
(7) Zusätzlich können noch über den Schalter WEITERE OPTIONEN ein
Benutzername (z.B. Mickey) und ein Password (z.B. Mouse) vergeben
werden.
(8) Schließen Sie die Dialogfelder.
1
JDBC
2
Zugriff auf eine Datenbank
Ein Javaprogramm, das Zugriff auf eine Datenbank haben soll, beinhaltet im
wesentlichen folgende Schritte :
(1) Import-Anweisung im Programm
import java.sql.*
public class JDBCExample {
public static void main (String[] args) {
}
}
(2) Der JDBC-Treiber wird geladen.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
(3) Eine Verbindung wird hergestellt.
Connection con = null ;
String url
= "jdbc:odbc:example" ;
String login
= "mickey" ;
String password = "mouse" ;
Connection con = DriverManager.getConnection(url, login, password) ;
Eine Verbindung wird durch ein Objekt der Klasse Connection repräsentiert.
Geöffnet wird die Verbindung durch einen Aufruf der Methode
DriverManager.getConnection().
(4) Ein Statement wird erzeugt.
Statement stmt = con.createStatement() ;
Das Connection-Objekt liefert Datenbank-spezifische Statements. Alle
Anweisungen an die Datenbank werden über Statements übertragen. SQLAusdrücke finden in Java also ihre Entsprechung im Statement-Objekt.
2
JDBC
(5) Daten werden aus der Datenbank abgefragt.
Die SQL-Abfragen werden in Strings abgelegt. Abfragen werden über
Statement-Objekte an die Datenbank übermittelt.
Das Ergebnis einer Abfrage wird in einem Objekt der Klasse ResultSet
gespeichert.
String query
= "select * from tablename"
ResultSet result = stmt.executeQuery(query) ;
(6) Die Daten verarbeiten.
while (result.next()) {
System.out.println(result.getString(1)
);
System.out.println(result.getInt(3)
);
System.out.println(result.getDate(4)
);
System.out.println(result.get...( "ColumnName")) ;
}
Das Ergebnis des Selectbefehls wird in Form einer Tabelle
zurückgeliefert. Die Daten werden in einem Objekt der Klasse ResultSet
gespeichert. Mit Hilfe der Methode next() der Klasse ResultSet kann man
sich in der Ergebnistabelle von einem Datensatz zum nächsten vorarbeiten. Das ResultSet hat also immer eine aktuelle Zeile (Cursor),
welche mit next gewechselt wird. Der Cursor ist initial vor der ersten
Zeile positioniert. Mit den get-Methoden der Klasse ResultSet kann man
aus jedem Datensatz die interessierenden Daten ausgeben.
Cursor
row
Santa
Claus 100000
24.12.2000
String m = result.getString(1) + " " +
Result.getString(2) + " delivers " +
Result.getInt(3)
+ " gifts on " +
Result.getDate(4) ;
"Santa Claus delivers 100000 gifts on 24.12.2000"
3
JDBC
(7) Daten ändern
SQL-Änderungen werden in Strings abgelegt. Die Änderungen werden auch
über Statement-Objekte an die Datenbank übermittelt.
String update = "update tableName" +
"set gifts = gifts +1" ;
stmt.executeUpdate(update) ;
Die SQl-Befehle insert und delete werden ebenfalls mit Hilfe der Methode
executeUpdate() der Klasse Statement an die Datenbank übertragen.
(8) Die Verbindung wird geschlossen.
Die Anzahl von Connections zu Datenbanken sind in der Regel begrenzt, da
sie lizenzpflichtig und Hardware-hungrig sind. Daher sollten sie nach der
(den) Datenbankoperation(en) wieder freigegeben werden.
stmt.close() ;
con.close() ;
3
Exceptions
Die JDBC-Schnittstelle bietet u.a. folgende Exceptions an:
- ClassNotFoundException
Der registrierte Treiber wird nicht gefunden.
- SQLException
Jede Anfrage an eine Datenbank kann zu einem Fehler führen (Datenbank
nicht erreichbar, Netzwerk unterbrochen, SQLString fehlerhaft, ...)
try {
// Verarbeitung mit Datenbank
} catch (ClassNotFoundException ex) {
...
} catch (SQLException ex) {
...
}
4
JDBC
4
Dynamisches SQL
SQL-Anweisungen müssen häufig erst zur Laufzeit des Programms generiert
werden. Daher werden die SQL-Anweisungen im Programm mit
Variablenwerten ergänzt.
Da SQL-Anweisungen in Java immer als Strings behandelt werden, konkateniert
man beim dynamischen SQL die Strings und Variablenwerte.
int id = 8 ;
String sql = "SELECT * FROM TABLE " +
"WHERE ID = " + id ;
stmt.executeQuery(sql) ;
int id
=8;
String name = "Mustermann" ;
int alter
= 26 ;
String sql = "INSERT INTO TABLE VALUES (" +
id
+ ", " +
"’ " + name + "’," +
alter + ") " ;
stmt.executeUpdate(sql) ;
5
JDBC
5
Beispiel
/*
Person2.java (mit Klassen und DAB)
*/
import java.util.Date;
import java.sql.*;
import java.lang.*;
public class Person2
{
public static void main (String args[])
{
String URL="jdbc:odbc:aiw4";
String Benutzername
="bibufh";
String Passwort
="Mouse";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (Exception e)
{
System.out.println("Treiber fehlt ...");
return ;
}
Statement Befehl = null;
Connection Verbindung = null;
try
{
Verbindung = DriverManager.getConnection(
URL,
Benutzername,
Passwort);
Befehl = Verbindung.createStatement();
}
6
JDBC
catch (Exception e)
{
System.out.println (e.getMessage());
return ;
}
try
{
String Beruf;
Beruf = "DBA";
ResultSet Ergebnis;
Ergebnis = Befehl.executeQuery("select Persnr, Nachname from
Person where Beruf = '
" + Beruf + "'");
String
String
Persnr;
Nachname;
while (Ergebnis.next())
{
Persnr = Ergebnis.getString("Persnr");
Nachname = Ergebnis.getString("Nachname");
System.out.println(" " + Persnr + " " + Nachname );
System.out.println("");
}
Befehl.close();
Verbindung.close();
}
catch (Exception e)
{
System.out.println (e.getMessage());
return ;
}
}
}
7
Herunterladen