Ich möchte mit einer Abfrage aus einer Access Tabelle den gesamten Inhalt erhalten und die Spalten des Result jeweils einem Array zuweisen.
Bei Zeile 95 Krige ich jedoch diese Exception und frage mich langsam ob das so überhaupt funktioniert was ich vor hatte.
Exception :
Exception in thread "main" java.lang.UnsupportedOperationException
at sun.jdbc.odbc.JdbcOdbcResultSet.getArray(JdbcOdbcResultSet.java:4424)
at database.DatabaseConnection.getDbContent(DatabaseConnection.java:102)
at database.Formular.<init>(Formular.java:19)
at database.Main.main(Main.java:19)
[Java]
/*
* DatabaseConnection stellt eine Verbindung zu einer Access Datei her und
* erstellt eine ArrayList, welche den Inhalt der Datenbank enthält.
*/
package database;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DatabaseConnection {
//Der Pfad zur Access Datei
String filepath;
//Enthält die einzelnen spalten und desen Einträge der Datenbank
ArrayList<String[]> columns;
//Die Verbindung zur Access Datenbank
Connection dbConnection;
//Benutzername für den Zugriff auf die Datenabnk falls benötigt
String username;
//Passwort für den Zugriff auf die Datenabnk falls benötigt
String password;
/**
*
* @param filepath Der Pfad zur Access Datei
*/
public DatabaseConnection(String filepath) {
this.filepath = filepath;
columns = new ArrayList<String[]>();
username = null;
password = null;
}
/**
*
* @param dbFile Die Access Datei
*/
public DatabaseConnection(File dbFile){
filepath = dbFile.getAbsolutePath();
columns = new ArrayList<String[]>();
username = null;
password = null;
}
public void setUsernameAndPassword(String username, String password) {
this.username = username;
this.password = password;
}
/**
* Fragt die Access Datenbank nach den ganzen Inhalt ab und speichert diesen
* in je eine ArrayListe pro Spalte und alle Spalten wiederum in eine
* ArrayList.
* @return ArrayList<ArrayList<String>> die einzelnen spalten und desen
* Einträge der Datenbank
*/
public ArrayList<String[]> getDbContent() {
//Wir prüfen ob die Verbindung zur Access Datenbank false ergibt
if (!connectToDatabase()) {
return null;
}
try {
//Der Befehl wird zum ausführen erstellt
PreparedStatement statement = dbConnection.prepareStatement(
"SELECT * FROM Autos");
//Befehl wird ausgeführt
statement.execute();
//Das Resultat der Abfrage wird gehollt
ResultSet result = statement.getResultSet();
String[] marke = (String[]) result.getArray("marke").getArray();
String[] preis = (String[]) result.getArray("preis").getArray();
String[] baujahr = (String[]) result.getArray("baujahr").getArray();
String[] farbe = (String[]) result.getArray("farbe").getArray();
dbConnection.close();
//Alle Arrays weren einer ArrayListe hinzugefügt
columns.add(marke);
columns.add(preis);
columns.add(baujahr);
columns.add(farbe);
} catch (SQLException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
return columns;
}
/**
* Stellt eine Verbindung zur Access Datenabnk her.
*/
private boolean connectToDatabase() {
try {
//Die Verbindung zu Access Datenbank wird hergestellt
String url = "jdbcdbcriver={Microsoft Access Driver (*.mdb)};DBQ=" + filepath + ";READONLY=false}";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dbConnection = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (ClassNotFoundException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
return true;
}
}
[/Java]
Bei Zeile 95 Krige ich jedoch diese Exception und frage mich langsam ob das so überhaupt funktioniert was ich vor hatte.
Exception :
Exception in thread "main" java.lang.UnsupportedOperationException
at sun.jdbc.odbc.JdbcOdbcResultSet.getArray(JdbcOdbcResultSet.java:4424)
at database.DatabaseConnection.getDbContent(DatabaseConnection.java:102)
at database.Formular.<init>(Formular.java:19)
at database.Main.main(Main.java:19)
[Java]
/*
* DatabaseConnection stellt eine Verbindung zu einer Access Datei her und
* erstellt eine ArrayList, welche den Inhalt der Datenbank enthält.
*/
package database;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DatabaseConnection {
//Der Pfad zur Access Datei
String filepath;
//Enthält die einzelnen spalten und desen Einträge der Datenbank
ArrayList<String[]> columns;
//Die Verbindung zur Access Datenbank
Connection dbConnection;
//Benutzername für den Zugriff auf die Datenabnk falls benötigt
String username;
//Passwort für den Zugriff auf die Datenabnk falls benötigt
String password;
/**
*
* @param filepath Der Pfad zur Access Datei
*/
public DatabaseConnection(String filepath) {
this.filepath = filepath;
columns = new ArrayList<String[]>();
username = null;
password = null;
}
/**
*
* @param dbFile Die Access Datei
*/
public DatabaseConnection(File dbFile){
filepath = dbFile.getAbsolutePath();
columns = new ArrayList<String[]>();
username = null;
password = null;
}
public void setUsernameAndPassword(String username, String password) {
this.username = username;
this.password = password;
}
/**
* Fragt die Access Datenbank nach den ganzen Inhalt ab und speichert diesen
* in je eine ArrayListe pro Spalte und alle Spalten wiederum in eine
* ArrayList.
* @return ArrayList<ArrayList<String>> die einzelnen spalten und desen
* Einträge der Datenbank
*/
public ArrayList<String[]> getDbContent() {
//Wir prüfen ob die Verbindung zur Access Datenbank false ergibt
if (!connectToDatabase()) {
return null;
}
try {
//Der Befehl wird zum ausführen erstellt
PreparedStatement statement = dbConnection.prepareStatement(
"SELECT * FROM Autos");
//Befehl wird ausgeführt
statement.execute();
//Das Resultat der Abfrage wird gehollt
ResultSet result = statement.getResultSet();
String[] marke = (String[]) result.getArray("marke").getArray();
String[] preis = (String[]) result.getArray("preis").getArray();
String[] baujahr = (String[]) result.getArray("baujahr").getArray();
String[] farbe = (String[]) result.getArray("farbe").getArray();
dbConnection.close();
//Alle Arrays weren einer ArrayListe hinzugefügt
columns.add(marke);
columns.add(preis);
columns.add(baujahr);
columns.add(farbe);
} catch (SQLException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
return columns;
}
/**
* Stellt eine Verbindung zur Access Datenabnk her.
*/
private boolean connectToDatabase() {
try {
//Die Verbindung zu Access Datenbank wird hergestellt
String url = "jdbcdbcriver={Microsoft Access Driver (*.mdb)};DBQ=" + filepath + ";READONLY=false}";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dbConnection = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (ClassNotFoundException ex) {
Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
return true;
}
}
[/Java]
Zuletzt bearbeitet: