// globales Objekt für Datenbankzugriff innerhalb der Klasse
private Connection conn = null;
// Verbindungsaufbau
public OraDBConnect(String connect_string) throws SQLException {
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(connect_string);
}
catch (SQLException e) {
if (e instanceof SQLException)
throw (SQLException)e;
else
throw new SQLException("Folgender Fehler ist aufgetreten: " + e);
}
}
Die Vorgehensweise beim Verbindungsaufbau erfolgt dabei genau so, wie es in den Grundlagen im vorigen Kapitel beschrieben wurde. Außerdem erfolgt eine Fehlerbehandlung mittels Kapselung durch einen try{}-Block, bei der geprüft wird, ob es sich um einen SQL-Fehler handelt, und dementsprechend eine Meldung ausgegeben. Die Prüfung im eventuellen Fehlerfall auf einen SQL-Fehler macht sich erforderlich, weil beim Registrieren des Treibers mittels der Methode registerDriver() der Fall auftreten könnte, daß der Treiber nicht gefunden wird. In diesem Fall würde aber eigentlich keine SQL-Exception vorliegen.
Zum Trennen einer bestehenden Datenbankverbindung wird die Methode OraDBClose() zur Verfügung gestellt. Die Vorgehensweise beim Verbindungsabbau erfolgt dabei genau so, wie es in den Grundlagen im vorigen Kapitel beschrieben wurde.
// Verbindungsabbau
public void OraDBClose() throws SQLException {
conn.close();
}
An dieser Stelle genügt es, die Fehlerbehandlung mittels throws-Anweisung durchzuführen.
Zum Ausführen von SELECT-Anweisungen auf der Datenbank wird die Methode OraDBgetResult() bereitgestellt. Diese bekommt beim Aufruf drei Parameter übergeben und liefert das Ergebnis der Abfrage in Form eines Vector-Objektes, welches Zeichenketten enthält, zurück. Während der Parameter sql die SELECT-Anweisung enthält, muß der Parameter args mit den Namen der Spaltenattribute initialisiert werden, die im SELECT-Abschnitt der Abfrage deklariert wurden. Diese Attributnamen werden innerhalb der Methode benötigt, um die zugehörigen Werte aus der Ergebnismenge zu ermitteln. Der Parameter mode gibt schließlich an, ob alle Tupel der Ergebnismenge zurückgeliefert werden sollen (mode mit 0 belegt), oder nur der erste.
// Datenbankabfrage mit Rückgabe des Ergebnisses in Form eines Vector-Objektes
public Vector OraDBgetResult(String sql, String[] args, int mode)
throws SQLException
{
Vector result = new Vector();
Statement sment = conn.createStatement();
ResultSet rs = sment.executeQuery(sql);
// wenn Ergebnismenge nicht leer ist
if (rs.next()) {
do {
// alle angeforderten Attribute der Ergebnismenge eines DS zur Liste hinzufügen
for (int i=0; i<args.length; i++) {
// falls NULL-Werte zurückgegeben werden, werden diese durch Leer-Strings ersetzt
if (rs.getString(args[i]) != null) {
result.addElement(rs.getString(args[i]));
}
else {
result.addElement("");
}
}
} while (rs.next() && (mode == 0));
}
// falls Ergebnismenge leer ist
else {
result = null;
}
rs.close();
sment.close();
return(result);
}
Die Vorgehensweise beim Ausführen einer SELECT-Anweisung erfolgt dabei genau so, wie es in den Grundlagen im vorigen Kapitel beschrieben wurde. Das Ersetzen von NULL-Werten durch Leer-Strings wäre übrigens beim Füllen des Vector-Objektes nicht unbedingt nötig. Man müßte dann nur bei der Auswertung des Vector-Objektes entsprechend auf NULL-Werte prüfen, bevor man einen Zugriff darauf ausführt. Eventuell auftretende Fehler innerhalb dieser Methode werden im Übrigen durch die in der Methodendeklaration vorkommende throws-Anweisung behandelt.
Die letzte zu dieser Klasse gehörende Methode heißt OraDBexecuteUpdate(). Sie dient der Ausführung von INSERT-, UPDATE- und DELETE-Anweisungen auf einer Datenbank. Als Parameter wird beim Methodenaufruf eine entsprechend formulierte SQL-Anweisung übergeben. Als Rückgabewert liefert OraDBexecuteUpdate() schließlich eine ganze Zahl, welche die Anzahl der von der SQL-Anweisung betroffenen Datensätze beinhaltet.
// Manipulation von Datensätzen
public int OraDBexecuteUpdate(String sql)
throws SQLException
{
try {
conn.setAutoCommit(false);
Statement sment = conn.createStatement();
int result = sment.executeUpdate(sql);
conn.commit();
conn.setAutoCommit(true);
// Rückgabewert ist die Anzahl der eingefügten/geänderten/gelöschten Datensätze
return result;
}
catch (SQLException e) {
conn.rollback();
conn.setAutoCommit(true);
throw (SQLException)e;
}
}
Die Vorgehensweise beim Ausführen einer INSERT-, UPDATE- oder DELETE-Anweisung erfolgt dabei genau so, wie es in den Grundlagen im vorigen Kapitel beschrieben wurde. Außerdem wird in dieser Methode zum Zwecke der Demonstration der Einsatz von manuell gesteuertem Transaktionsbetrieb dargestellt, was aber im speziellen Beispiel eigentlich nicht erforderlich wäre, da innerhalb der Methode ohnehin nur eine einzige Schreiboperation auf der Datenbank ausgeführt wird.
Eventuell auftretende Fehler innerhalb dieser Methode werden wiederum durch die in der Methodendeklaration vorkommende throws-Anweisung behandelt.