JDBC-ODBC Bridge als DataSource
In Java verwendet man für den Zugriff auf Datenbanken eine JDBC-Treiber. Soweit möglich und verfügbar wird man auf JDBC-Treiber vom Typ 4 zurückgreifen, die direkt ohne weitere Zwischenschichten und Abhängigkeiten zur (system-) spezifischer Software auf das ®DBMS zugreifen. In meinem aktuellen Projekt ist das leider nicht möglich. Es existiert kein JDBC-Treiber, der native auf eine MS Access “Datenbank” zugreifen kann und dabei die Möglichkeit zum Zugriff auf OLE- / BLOB-Felder bietet.
Im Internet findet man sehr schnell Anleitungen, wie man über die JDBC-ODBC Bridge von Sun (Oracle) den ODBC-Treiber für Microsoft Access nutzen kann.
Nach dem Laden der Bridge sun.jdbc.odbc.JdbcOdbcDriver
öffnet man über den DriverManger
eine Verbindung (Connection) zur Datenbank.
Beim Aufruf der Methode getConnection
des DriverManger
können weitere Parameter (java.util.Properties
) an die Bridge bzw. den ODBC-Treiber übergeben werden.
Wichtig ist hierbei vor allem der Parameter zur Konfiguration des zu verwendenden Zeichensatzes (charSet
).
Wird dieser Parameter nicht korrekt gewählt, erhält man statt Umlauten ? Zeichen aus der Datenbank.
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Properties properties = new Properties();
properties.put("charSet", "ISO-8859-1");
String url = "jdbc:odbc:dsn1";
Connection connection = DriverManager.getConnection(url, properties);
Verwendet man – wie ich im Projekt – das Framework Spring kommt man mit einer Connection
bzw. dem DriverManager
nicht weit.
Zur Konfiguration von Datenbankverbindungen verwendet Spring DataSource
Objekte (javax.sql.DataSource
).
Über die von Spring zur Verfügung gestellte DriverManagerDataSource
kann man die oben beschriebene Verwendung der JDBC-ODBC Bridge 1:1 nach Spring übernehmen.
Nachteil dabei ist, dass man bei der DriverManagerDataSource
keine Möglichkeit zur Konfiguration weiterer Parameter hat.
Der Zugriff auf die Datenbank in Spring funktioniert, nur kommen die Umlaute mangels des konfigurierten Parameters charSet
nicht korrekt in Java an.
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName"
value="sun.jdbc.odbc.JdbcOdbcDriver"/>
<property name="url" value="jdbc:odbc:dsn1"/>
</bean>
Sun stellt neben der eigentlichen JDBC-ODBC Bridge aber auch eine DataSource
(sun.jdbc.odbc.ee.DataSource
) zur Verfügung.
Diese kann wie jede andere Implementierung von javax.sql.DataSource
in Spring verwendet werden.
Verwendet man die DataSource
statt der JDBC-ODBC Bridge besteht auch in Spring die Möglichkeit, weitere Parameter an den Treiber zu übergeben.
Hierzu stellt die DataSource
Attribute zur Verfügung.
Für die Konfiguration des Zeichensatzes ist dies das Attribute CharSet
.
<bean id="dataSource" class="sun.jdbc.odbc.ee.DataSource"
destroy-method="close">
<property name="databaseName" value="dsn1"/>
<property name="charSet" value="ISO-8859-1"/>
</bean>
Durch die Verwendung der von Sun (Oracle) zur Verfügung gestellten DataSource wird zum einen die Konfiguration in Spring wesentlich sauberer zum anderen kann man auf diese Weise auch den benötigten Parameter zur Festlegung des Zeichensatzes angeben.