Ein spannendes Thema, das leider zu wenig wahrgenommen wird und Praxisbeispiele sieht man eh selten. Das soll sich ändern. Ja, es ist wirklich kein Problem, Python-Klassen von Java-Klassen erben zu lassen und somit ist der Zugriff auf das mächtige Java Datenbank-API auch für Python-Entwickler leicht zu bewerkstelligen. Falls man das möchte;-).
Folgendes Szenario: Sie müssen/wollen/sollen aus einem Python-Script via <i>JDBC</i> auf eine Datenbank (in unserem Fall <i>MysQL</i>;-)) zugreifen.
Allerdings müssen ein paar Vorraussetzungen erfüllt sein, um das Ganze durchführen zu können. Die Programmiersprache Java muß installiert sein - möglichst die letzte stabile Version (derzeit <i>j2sdk1.4.1</i>). Ob das tatsächlich so ist, läßt sich mit dem Aufruf <i>type java</i> schnell in Erfahrung bringen. Die Ausgabe sollte so aussehen:
<PRE>
java is hashed (/home/merman/j2sdk1.4.1_01/bin/java)
</PRE>
Ist Java nicht installiert, müssen Sie es sich von der Sun-Website [1] besorgen oder auf eine Heft-CD (zum Beispiel aus dem Java-Magazin) bzw. eine Buch-CD zurückgreifen und es selbst installieren.
Unter Linux wird die Sprache in der Regel bei einer Standard-Installation mit auf die Platte des Anwenders geschaufelt. Soweit so gut.
Um <i>MySQL</i>-basierte Programme mit Java schreiben zu können, benötigen Sie zusätzlich einen <i>MySQL</i>-spezifischen Treiber. Sehr beliebt und weit verbreitet ist <i>Connector/J</i> [2] - diesen Treiber hat auch der Autor benutzt. Besorgen Sie sich den passenden Treiber und folgen Sie der Installations-Anleitung.
Weiterhin benötigen Sie die aktuelle Jython-Version. Diese finden Sie wiederum unter [3]. Die letzte "stable version" trägt die Versionsnummer 2.1 - die Datei kann man kostenlos downloaden (ca. 2,1 MB groß).
Die Jython-Installation ist kinderleicht, folgen Sie einfach den Anweisungen im README (beziehungsweise der INSTALL-Datei).
Aber was zum Teufel ist Jython eigentlich? Die Antwort lautet: Jython ist, im Gegensatz zu CPython (dem klassischen Python), einfach in Java implementiert worden, weiter nix. Doch, es ist langsamer;-). Somit stehen dem Python-Entwickler eigentlich zwei Sprachen zur Verfügung: Python und Java!
Ach ja, <i>MySQL</i> muß ebenfalls installiert sein - testen Sie das mit dem gleichen Aufruf, mit dem Sie nach Java gesucht haben. Das ist alles an Vorbereitungen.
Zur Praxis. Zuerst wird eine Java-Klasse geschrieben. Sie stellt die Verbindung zur Datenbank her. Diese Klasse enthält insgesamt nur zwei Methoden (eine Verbindungsmethode und eine Testmethode).
Anschließend muß noch eine Jython-Klasse implementiert werden. Diese Klasse erbt von der Java-Klasse, überschreibt die Testmethode der Superklasse und setzt schlußendlich die Anfrage an den Datenbank-Server ab. Fertig. Fangen wir mit Java-Klasse an.
<PRE>
import java.sql.*;
import java.util.*;
public class MySQLClient {
Connection conn = null;
// Standard-CTOR
public MySQLClient () {}
public Connection connect(String url, String user, String pwd) throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("\nConnected!");
} catch (Exception ex) {
ex.printStackTrace();
}
return conn;
}
public ArrayList dbCheck() throws SQLException {
ArrayList dbData = new ArrayList();
// Verbindungsparameter durch eigene Angaben ersetzen: host, database, username, password
conn = this.connect("jdbc:mysql://host/database", "username", "password");
DatabaseMetaData meta = conn.getMetaData();
System.out.print("\n ... PRODUCT: " + meta.getDatabaseProductName());
System.out.print("\n ... VERSION: " + meta.getDatabaseProductVersion());
System.out.print("\n ... DRIVER : " + meta.getDriverName());
System.out.print("\n ... DB-URL : " + meta.getURL());
System.out.print("\n ... USER :
Folgendes Szenario: Sie müssen/wollen/sollen aus einem Python-Script via <i>JDBC</i> auf eine Datenbank (in unserem Fall <i>MysQL</i>;-)) zugreifen.
Allerdings müssen ein paar Vorraussetzungen erfüllt sein, um das Ganze durchführen zu können. Die Programmiersprache Java muß installiert sein - möglichst die letzte stabile Version (derzeit <i>j2sdk1.4.1</i>). Ob das tatsächlich so ist, läßt sich mit dem Aufruf <i>type java</i> schnell in Erfahrung bringen. Die Ausgabe sollte so aussehen:
<PRE>
java is hashed (/home/merman/j2sdk1.4.1_01/bin/java)
</PRE>
Ist Java nicht installiert, müssen Sie es sich von der Sun-Website [1] besorgen oder auf eine Heft-CD (zum Beispiel aus dem Java-Magazin) bzw. eine Buch-CD zurückgreifen und es selbst installieren.
Unter Linux wird die Sprache in der Regel bei einer Standard-Installation mit auf die Platte des Anwenders geschaufelt. Soweit so gut.
Um <i>MySQL</i>-basierte Programme mit Java schreiben zu können, benötigen Sie zusätzlich einen <i>MySQL</i>-spezifischen Treiber. Sehr beliebt und weit verbreitet ist <i>Connector/J</i> [2] - diesen Treiber hat auch der Autor benutzt. Besorgen Sie sich den passenden Treiber und folgen Sie der Installations-Anleitung.
Weiterhin benötigen Sie die aktuelle Jython-Version. Diese finden Sie wiederum unter [3]. Die letzte "stable version" trägt die Versionsnummer 2.1 - die Datei kann man kostenlos downloaden (ca. 2,1 MB groß).
Die Jython-Installation ist kinderleicht, folgen Sie einfach den Anweisungen im README (beziehungsweise der INSTALL-Datei).
Aber was zum Teufel ist Jython eigentlich? Die Antwort lautet: Jython ist, im Gegensatz zu CPython (dem klassischen Python), einfach in Java implementiert worden, weiter nix. Doch, es ist langsamer;-). Somit stehen dem Python-Entwickler eigentlich zwei Sprachen zur Verfügung: Python und Java!
Ach ja, <i>MySQL</i> muß ebenfalls installiert sein - testen Sie das mit dem gleichen Aufruf, mit dem Sie nach Java gesucht haben. Das ist alles an Vorbereitungen.
Zur Praxis. Zuerst wird eine Java-Klasse geschrieben. Sie stellt die Verbindung zur Datenbank her. Diese Klasse enthält insgesamt nur zwei Methoden (eine Verbindungsmethode und eine Testmethode).
Anschließend muß noch eine Jython-Klasse implementiert werden. Diese Klasse erbt von der Java-Klasse, überschreibt die Testmethode der Superklasse und setzt schlußendlich die Anfrage an den Datenbank-Server ab. Fertig. Fangen wir mit Java-Klasse an.
<PRE>
import java.sql.*;
import java.util.*;
public class MySQLClient {
Connection conn = null;
// Standard-CTOR
public MySQLClient () {}
public Connection connect(String url, String user, String pwd) throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("\nConnected!");
} catch (Exception ex) {
ex.printStackTrace();
}
return conn;
}
public ArrayList dbCheck() throws SQLException {
ArrayList dbData = new ArrayList();
// Verbindungsparameter durch eigene Angaben ersetzen: host, database, username, password
conn = this.connect("jdbc:mysql://host/database", "username", "password");
DatabaseMetaData meta = conn.getMetaData();
System.out.print("\n ... PRODUCT: " + meta.getDatabaseProductName());
System.out.print("\n ... VERSION: " + meta.getDatabaseProductVersion());
System.out.print("\n ... DRIVER : " + meta.getDriverName());
System.out.print("\n ... DB-URL : " + meta.getURL());
System.out.print("\n ... USER :
Comment