Java Database Connectivity

From XennisWiki
Jump to: navigation, search

Java Database Connectivity (JDBC) ist eine Datenbankschnittstelle der Java-Plattform, die eine einheitliche Schnittstelle zu Datenbanken verschiedener Hersteller bietet und speziell auf relationale Datenbanken ausgerichtet ist. (Wikipedia)

Beispieltabelle

Datenbank-Tabelle album

+------------------+---------------------+-----+
| Field            | Type                | Key |
+------------------+---------------------+-----+
| albumtitel       | varchar(42)         |     |
| interpret        | varchar(42)         |     |
| erscheinungsjahr | int                 |     |
| bewertung        | decimal(2,1)        |     |
+------------------+---------------------+-----+

Beispielprogramm

Das folgende Programm stellt mittels JDBC eine Verbindung zur HyperSQL Database Engine her und bietet grundlegende Funktionen, wie zum Beispiel das Einfügen oder Löschen von Daten.

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;

import info1package.*;

/**
 * Das Programm stellt mittels JDBC eine Verbindung zur HyperSQL Database
 * Engine her und bietet grundlegende Funktionen, wie zum Beispiel das
 * Einfügen oder Löschen von Daten.
 */
public class JavaAndJdbc {

	/** Verbindung zur Datenbank */
	private static Connection connection;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		connection = connectToDb("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/", "sa", "");
		try {
			connection.setAutoCommit(false);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		menu();
	}
	
	/**
	 * Stellt die Verbindung mit der Datenbank her.
	 * 
	 * @param driver
	 *            Treiber der Datenbank
	 * @param url
	 *            Datenbank-URL
	 * @param user
	 *            Datenbank-Benutzer
	 * @param passwort
	 *            Benutzer-Passwort
	 * @return Verbindung zur Datenbank oder Null
	 */
	private static Connection connectToDb(String driver, String url, String user, String passwort) {
		try {
			Class.forName(driver);
			return DriverManager.getConnection(url, user, passwort);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * Zeigt das Menü an und erwartet vom Benutzer eine Eingabe.
	 */
	private static void menu() {
		System.out.println("\n1: Anzeigen - 2: Einfügen - 3: Löschen - 4 Beenden - 5 Commit - 6 Rollback");
		Eingabe tastatur = Eingabe.oeffnen("");
		int i = tastatur.readint();
		switch (i) {
		case 1:
			pShow();
			break;
		case 2:
			System.out.println("Datein eingeben: Titel,Interpret,Jahr,Bewertung (jeweils getrennt durch ein Kommar)");
			pInsert(tastatur.readString());
			break;
		case 3:
			System.out.println("Albumtitel eingeben");
			pDelete(tastatur.readString());
			break;
		case 4:
			System.out.println("Exit");
			pExit();
			return;
		case 5:
			System.out.println("Commit");
			pCommit();
			break;
		case 6:
			System.out.println("Rollback");
			pRollback();
			break;
		default:
			System.out.println("Falsche Eingabe");
			menu();
			break;
		}
		
		menu();
	}


	/**
	 * Zeigt die Daten der Tabelle an.
	 */
	private static void pShow() {
		ResultSet result = dbQuery("Select * From Album");

		if(result != null) {
			try {
				while(result.next()) {
					for(int i=1; i<=result.getMetaData().getColumnCount(); i++) {
						System.out.print(result.getObject(i) + "\t");
					}
					System.out.println();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}			
		}
	}
	
	/**
	 * Fügt eine Zeile in die Tabelle ein.
	 * 
	 * @param readString Daten als String und getrennt durch Kommata
	 */
	private static void pInsert(String readString) {
		String[] split = readString.split(",");
		
		System.out.println(Arrays.toString(split));
		
		try {
			String titel = split[0];
			String interpret = split[1];
			int jahr = Integer.parseInt(split[2]);
			float bewertung = Float.parseFloat(split[3]);

			String insert = "Insert Into Album Values ('" + titel + "','" + interpret + "', " + jahr + "," + bewertung + ")";
			dbUpdate(insert);
		} catch (Exception e) {
			System.err.println("Falsche Eingabe: " + e.getMessage());
		}
	}
	
	/**
	 * Löscht einen Eintrag aus der Datenbank
	 * 
	 * @param titel Albumtitel
	 */
	private static void pDelete(String titel) {
		String delete = "Delete From Album WHERE Albumtitel='" + titel + "'";
		dbUpdate(delete);
	}
	
	/**
	 * Beendet das Programm.
	 */
	private static void pExit() {
		try {
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Commit
	 */
	private static void pCommit() {
		try {
			connection.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

	/**
	 * Rollback
	 */
	private static void pRollback() {
		try {
			connection.rollback();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Gibt das Ergebnis einer Anfrage zurück.
	 * 
	 * @param query Anfrage
	 * @return Ergebnis der Anfrage
	 */
	private static ResultSet dbQuery(String query) {
		ResultSet result = null;
		try {
			Statement statement = connection.createStatement();
			result = statement.executeQuery("Select * From Album");
			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * Aktualisiert die Datenbank.
	 * 
	 * @param query Update oder Delete Anfrage
	 * @return Ergebnis der Akutalisierung
	 */
	private static int dbUpdate(String query) {
		int result = Integer.MAX_VALUE;
		try {
			Statement statement = connection.createStatement();
			result = statement.executeUpdate(query);
			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}


}

Hibernate Konfiguration

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">
      org.hsqldb.jdbcDriver
    </property>
    <property name="hibernate.connection.url">
      jdbc:hsqldb:file:./hSqlDbData/myDB;shutdown=true
    </property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>
    <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    <property name="show_sql">false</property>
    <property name="transaction.factory_class">
      org.hibernate.transaction.JDBCTransactionFactory
    </property>
    <property name="hibernate.cache.provider_class">
      org.hibernate.cache.HashtableCacheProvider
    </property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <mapping resource="DEINE-DATEI.hbm.xml"/>
    <mapping resource="EINE-WEITERE-DATEI.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Siehe auch