Logindaten

Werbung
Willkommen
Datenbanken und Anbindung
Welche stehen zur Wahl?
●
●
MySQL
–
Sehr weit verbreitetes DBS (YT, FB, Twitter)
–
Open-Source und Enterprise-Version
–
Libs in C/C++ und Java verfügbar
–
Grundsätzlich ist ein Server und einer oder mehrere Clients, die
Anfragen an diesen senden vorgesehen
PostgreSQL
–
Open-Source
–
Weitgehend mit dem SQL-Standard
ANSI-SQL 2008 konform
–
Schnittstellen zu C/C++ und Java verfügbar
●
MySQL-Server
–
●
http://dev.mysql.com/downloads/mysql/
PostgreSQL-Server
–
http://www.postgresql.org/download/
Datenbankanbindung in Java/JDBC
●
JDBC
–
Einheitliche Schnittstelle der Java-Plattform zu
Datenbanken verschiedener Hersteller
–
Aufgaben sind es Verbindungen zu Datenbanken
herzustellen, zu verwalten, SQL-Anfragen an die DB
weiterzuleiten und die Ergebnisse dieser in Java zur
Verfügung zu stellen
–
Für jedes DBS sind eigene Treiber erforderlich, die die
JDBC-Spezifikation implementieren
Datenbankanbindung in Java/JDBC
10 Connection conn;
20 try {
30
conn = DriverManager.getConnection(...Logindaten...);
40 } catch(SQLException e) {
50
/* Fehlerbehandlung */
60 }
●
Das JAR mit dem Treiber über die IDE dem Projekt hinzufügen
●
Die Verbindung herstellen über den DriverManager
●
●
Der DriverManager übernimmt seit JDBC4 das laden der Treiber
automatisch
Alle SQL Vorgänge müssen in Try-Catch Blöcke gefasst werden
Datenbankanbindung in Java/JDBC
10 Statement stmt;
20 try {
30
stmt = conn.createStatement();
40 stmt.execute("CREATE TABLE IF NOT EXISTS list(item_id SERIAL NOT NULL
PRIMARY KEY, item_name VARCHAR(255))");
50 } catch (SQLException e) { /* Fehlerbehandlung */ }
●
Sich vom Verbindungsobjekt ein Statement Objekt holen
●
Mit der execute – Methode den SQL-Befehl ausführen
●
Hier das anlegen einer Tabelle
Datenbankanbindung in Java/JDBC
10 ResultSet rs;
20 Statement stmt;
30 try {
40
stmt = conn.createStatement();
50
rs = stmt.executeQuery("SELECT item_name FROM list“);
60 } catch(SQLException e) { /*Fehlerbehandlung*/ }
●
Sich vom Verbindungsobjekt ein Statement Objekt holen
●
Mit der executeQuery – Methode den SQL-Befehl ausführen
●
Und den Rückgabewert in einem ResultSet speichern
●
Dieses kann nachher durchlaufen werden, um die Werte der
einzelnen Zeilen zu bekommen
Datenbankanbindung in Java/JDBC
10 try {
20
while(rs.next()) {
30
System.out.println(rs.getString(1));
40
}
50
rs.close();
60 } catch(SQLException e) { /*Fehlerbehandlung*/ }
●
●
Das ResultSet mit der Methode next solange iterieren bis next() false zurück
liefert
ResultSet liefert mehrere Methoden um SQL Datentypen als Java Datentypen
zurückgeben lassen
●
Den Rückgabewert speichern/ausgaben ...
●
Das ResultSet schließen
Datenbankanbindung in Java/JDBC
10 Statement stmt; String neuerWert = "foobar“;
20 try {
30
stmt = conn.createStatement();
40 stmt.executeUpdate("INSERT INTO list (item_name) VALUES ('"+neuerWert+
"')");
50 } catch(SQLException e) { /*Fehlerbehandlung*/ }
●
Sich vom Verbindungsobjekt ein Statement Objekt holen
●
Mit der executeUpdate – Methode den SQL Befehl ausführen
●
Der Rückgabewert würde angeben wieviel Zeilen geändert wurden
●
executeUpdate auch für DELETE und UPDATE – SQL Statements
●
stmt.executeUpdate("DELETE FROM list WHERE item_id = '"+id+"'");
●
stmt.executeUpdate("UPDATE list SET (item_name)=('"+neuerWert+"') WHERE item_id='"+id+"'");
Datenbankanbindung in Java/JDBC
●
JDBC-Connector für MySQL:
–
●
http://dev.mysql.com/downloads/connector/j/
JDBC-Connector für PostgreSQL:
–
http://jdbc.postgresql.org/download.html
Datenbankanbindung in C++
●
●
●
●
Keine einheitliche Schnittstelle zu Datenbanken in C++ bzw.
in der Std.-Lib selbst verfügbar!
Es existiert hier jedoch ebenso eine einheitliche Schnittstelle,
welche sich ODBC nennt (Ursprünglich nur unter Windows,
mittlerweile auch unter Unix-Betriebssystemen verfügbar)
Auch hier sind für jedes spezifisches DBS eigene Treiber
erforderlich, die die ODBC-Spezifikation implementieren
Wir werden jedoch die offiziellen Libs der DBS direkt nutzen,
da ODBC teilweise einige zusätzliche Konfigurationsarbeit
erfordert...
Datenbankanbindung in C++
01 #include <pqxx/pqxx>
02 pqxx::connection conn("dbname=myPostgreSqlDB user=myUserName");
03 pqxx::work transaction(c);
04 pqxx::result r = transaction.exec("INSERT INTO fahrzeuge (marke) VALUES
('Audi');“);
05 transaction.commit();
06 ...
●
Die Headers der libpqxx werden inkludiert
●
Eine Verbindung zur DB wird hergestellt, Name und User obligatorisch...
●
Eine neues Transaktions-Objekt wird erstellt, welches die vorher hergestellte Verbindung nutzt
●
●
Ein SQL-Statement wird mittels der exec-Methode abgesetzt, welches ein Result-Objekt zurück
gibt
Zum Schluss wird die Transaktion „committed“ bzw. die DB dazu veranlasst, die Änderungen
persistent zu übernhemen
Datenbankanbindung in C++
01 ...
02 pqxx::result r = transaction.exec("SELECT * FROM fahrzeuge“);
03 for (int i = 0; i < r.size(); i++) {
04
pqxx::result::tuple row = r[i];
05
pqxx::result::field column = row[0]; // Immer nur Spalte 0
06
...
07 }
●
Durch das SELECT-Statement werden Daten von der DB erfragt
●
Durchlaufen aller zurückgegebener Zeilen im Result-Objekt
●
Das Result-Objekt „r“ enthält ein Array von einzelnen Zeilen-Objekten
●
Jedes dieser Zeilen-Objekte enthält wiederum die einzelnen SpaltenWerte die auch in einem Array gespeichert sind
Datenbankanbindung in C++
●
C++ Lib für MySQL
–
●
http://dev.mysql.com/downloads/connector/cpp/
C++ Lib für PostgreSQL
–
http://pqxx.org/development/libpqxx/
Ende
●
Beispielprogramme...
Herunterladen