Zugriff auf eine Access Datenbank

DERHAARKAMM

Mitglied
Class.forName(driver);
con = DriverManager.getConnection(url);
Prinzipiell kann man ja mit diesen Befehlen eine Aufbau zu einer Datenbank aufbaun, jedoch habe ich keinen geeigneten Treiber für den Zugriff auf eine Microsoft Access Datenbank gefunden!
 
Da steht nur das da über die OCDB-Verwaltung in der Systemsteuerung.
Ich mache das direkt, und habe soetwas noch nie gebraucht:

Java:
connection = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + filename,"","");

Weiß zwar nicht was J2EE (und das andere im Boardnamen) eigendlich ist, aber so hat es bei mir mit dem Standartjava immer geklappt. Hier eine kleine Klasse die ich mir geschrieben habe.

Java:
package core;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public final class AccessConnect extends Object
{
	public AccessConnect()
	{
		super();
	}
    public static Connection connect(String filename)
    {
		Connection connection = null;

		if(!new File(filename).exists())
		{
			ShowError.run(2, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
		
    	try
    	{
    		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    		connection = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + filename,"","");
		}
		catch(Exception e)
		{
			ShowError.run(3, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
		return(connection);
    }
    public static ResultSet executeQuery(String query, Connection connection)
    {
    	ResultSet resultSet = null;
    	
		try
		{
			resultSet = connection.createStatement().executeQuery(query);
		}
		catch(Exception e)
		{
			ShowError.run(4, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
		return(resultSet);
    }
    public static void nextResult(ResultSet resultSet)
    {
		try
		{
			resultSet.next();
		}
		catch(Exception e)
		{
			ShowError.run(5, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
    }
    public static String getColumncontentAsString(String columnname, ResultSet resultSet)
    {
    	String result = null;
    	
    	try
    	{
			result = resultSet.getString(columnname);
		}
    	catch(Exception e)
    	{
			ShowError.run(6, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
    	return(result);
    }
    public static int getColumncontentAsInt(String columnname, ResultSet resultSet)
    {
    	int result = 0;

    	try
    	{
			result = resultSet.getInt(columnname);
		}
    	catch(Exception e)
    	{
			ShowError.run(7, ShowError.ERROR_MESSAGE);
			System.exit(1);
		}
    	return(result);
    }
    public static void closeConnection(ResultSet resultSet, Connection connection)
    {
    	if(resultSet != null)
    	{
        	try
        	{
    			resultSet.close();
        	}
        	catch(Exception e)
        	{
    			ShowError.run(10, ShowError.WARNING_MESSAGE);
        	}
    	}
    	if(connection != null)
    	{
        	try
        	{
        		connection.close();
        	}
        	catch(Exception e)
        	{
    			ShowError.run(10, ShowError.WARNING_MESSAGE);
        	}
    	}
    }
}
Java:
package core;

import javax.swing.JOptionPane;

public final class ShowError extends Object
{
	public final static byte BLANK_MESSAGE = -1;
	public final static byte ERROR_MESSAGE = 0;
	public final static byte INFORMATION_MESSAGE = 1;
	public final static byte WARNING_MESSAGE = 2;
	public final static byte QUESTION_MESSAGE = 3;
	
	private static String[] msg = {
/*00*/	"Datei wurde nicht gefunden.\nProgramm wird nun beendet.",
/*01*/	"Eines oder mehrere Bilder konnten nicht werden.\nProgramm wird nun beendet.",
/*02*/	"Eine Datenbankdatei wurde nicht gefunden.\nDas Programm wird nun beendet.",
/*03*/	"Die Verbindung zu der Datenbank konnte nicht aufgebaut werden.\nDas Programm wird nun beendet.",
/*04*/	"Die Angeforderte Datenbank-Query konnte nicht abgearbeitet werden.\nDas Programm wird nun beendet.",
/*05*/	"Das nächste Result konnte nicht ausgewählt werden.\nDas Programm wird nun beendet.",
/*06*/	"Konnte Spalteninhalt nicht als String zurückgeben.\nDas Programm wird nun beendet.",
/*07*/	"Konnte Spalteninhalt nicht als Integer zurückgeben.\nDas Programm wird nun beendet.",
/*08*/	"Datenbankabfrage fehlgeschlagen.\nDas Programm wird nun beendet.",
/*09*/	"Datenbankverbindung wurde bereits geschlossen.\nDas Programm wird nun beendet.",
/*10*/	"Datenbankverbindung konnte nicht geschlossen werden.\nDas Programm wird nun beendet.",
	};
	
	public ShowError()
	{
		super();
	}
	public final static void run(int errorId, byte errorTyp)
	{
		if(ShowError.msg.length - 1 < errorId)
			return;
		if(errorTyp != -1 &&
				errorTyp != 0 &&
				errorTyp != 1 &&
				errorTyp != 2 &&
				errorTyp != 3)
			return;
		
		JOptionPane.showMessageDialog(null, ShowError.msg[errorId],
				"Error #" + errorId, errorTyp);
	}
}
Das 2. dient nur dazu, im Fehlerfall JOptionPane's mit einer Msg. auszugeben.
Eigendlich wollte ich beim 1. noch jeweils eine Überprüfung durchführen ob die Verbindung noch nicht geschlossen ist, aber mir hat es jedes mal eine Exception nach dem Stil "Database is not ready for this command" oder irgendwie so geschmissen, dann habe ich es einfach wieder entfernt.

Vielleicht fängst du ja was damit an.

Ach ja, vergiss nicht, dass man "getColumncontentAsInt/String" nur 1 mal pro Verbindungsaufbau auf eine Spalte nutzen kann. Ich habe vergessen was sonst passiert, aber auf jedem Fall nichts gutes.
 
Zurück