Hey ich bin neu hier und hätte gleich mal eine Frage an der ich echt schon lange sitze.
Das Problem ist folgendes: ich möchte Mithilfe von jdbc, ucanaccess und einer .accdb Datenbank deren Werte auslesen, um dann ein, für MySQL lesbares Script anzufertigen.
Wenn ich nun allerdings aus meiner Testdatei die Primärschlüssel auslesen will, so bekomme ich manchmal welche und manchmal nicht :-(
Mit diesem Code hier extrahiere ich die Infos aus der Datei.
Die Daten werden dann zusammengefügt und bei meiner Testdatei mit 4 Tabellen kommt dann folgendes raus:
Aber sowohl Person, als auch Test haben Primärschlüssel
Außerdem scheint Auto-Increment nicht zu funktionieren, was mich ziemlich wundert, da ich da genau nach Maßgabe vorging.
Und ich konnte leider nirgends erfahren, wie ich die anderen Attribute, wie unsigned herausfinde. Ich hab es gegoogelt, aber irgendwie scheinen die Befehle rs.isSigned() o.ä. bei meinen Bibliotheken nicht dabei zu sein.
Es wäre auch echt noch mega hilfreich, wenn man rausfinden könnte, was man bei rs.getString("COLUMN_NAME") statt Column_Name noch so alles eingeben kann. Auch da hab ich ne Anleitung gefunden, aber auch diese Befehle finden sich in meinen Bibliotheken scheinbar nicht.
Jetzt hab ich aber ganz schön viel gefragt. Sorry.
Auf jeden Fall schon mal vielen Dank im Voraus.
MfG
LT
Das Problem ist folgendes: ich möchte Mithilfe von jdbc, ucanaccess und einer .accdb Datenbank deren Werte auslesen, um dann ein, für MySQL lesbares Script anzufertigen.
Wenn ich nun allerdings aus meiner Testdatei die Primärschlüssel auslesen will, so bekomme ich manchmal welche und manchmal nicht :-(
Mit diesem Code hier extrahiere ich die Infos aus der Datei.
Java:
private Connection conn;
private Statement stmt;
private ResultSet rs;
private DatabaseMetaData dbmd;
public ACCDB_DB(String pPfad) throws SQLException
{
conn = DriverManager.getConnection("jdbc:ucanaccess://"+pPfad);
dbmd = conn.getMetaData();
}
public ArrayList getTables() throws SQLException
{
ArrayList<String> ret = new ArrayList();
rs = dbmd.getTables(null, null, null, null);
while(rs.next())
{
ret.add(rs.getString("TABLE_NAME"));
}
return ret;
}
public ArrayList getColumns(String pTable) throws SQLException
{
ArrayList<String> ret = new ArrayList();
rs = dbmd.getColumns(null, null, pTable, null);
while(rs.next())
{
String add = rs.getString("COLUMN_NAME")+" "+rs.getString("TYPE_NAME");
if(rs.getString("TYPE_NAME") != "BOOLEAN" && rs.getString("TYPE_NAME") != "TIMESTAMP"
&& rs.getString("TYPE_NAME") != "DECIMAL")
add+=" ("+rs.getString("COLUMN_SIZE")+")";
if((rs.getString("IS_AUTOINCREMENT").toUpperCase()) == "YES")
{
add = add+" AUTO_INCREMENT";
}
ret.add(add);
}
return ret;
}
public ArrayList<String> getPrimaryKeys(String pTable) throws SQLException
{
ArrayList<String> ret = new ArrayList<String>();
rs = dbmd.getImportedKeys(null, null, pTable);
while(rs.next())
{
ret.add("PRIMARY KEY ("+rs.getString("PKCOLUMN_NAME")+")");
}
return ret;
}
Die Daten werden dann zusammengefügt und bei meiner Testdatei mit 4 Tabellen kommt dann folgendes raus:
Code:
CREATE TABLE IF NOT EXISTS angestellter(
personalnr INTEGER (32),
abteilung VARCHAR (255),
urlaubstage INTEGER (32),
PRIMARY KEY (personalnr));
CREATE TABLE IF NOT EXISTS manager(
personalnr INTEGER (32),
abteilungsleiter BOOLEAN,
geschaeftsfuehrer BOOLEAN,
PRIMARY KEY (personalnr));
CREATE TABLE IF NOT EXISTS person(
personalnr INTEGER (32),
name VARCHAR (255),
vorname VARCHAR (255),
geburtsdatum TIMESTAMP,
gehalt DECIMAL);
CREATE TABLE IF NOT EXISTS test(
test1 VARCHAR (255),
test2 VARCHAR (16777216),
test3 INTEGER (32),
test4 BIGINT (64),
test5 TIMESTAMP,
test6 DECIMAL,
test7 INTEGER (32),
test8 BOOLEAN,
test9 VARBINARY (16777216),
test10 VARCHAR (16777216));
Aber sowohl Person, als auch Test haben Primärschlüssel
Außerdem scheint Auto-Increment nicht zu funktionieren, was mich ziemlich wundert, da ich da genau nach Maßgabe vorging.
Und ich konnte leider nirgends erfahren, wie ich die anderen Attribute, wie unsigned herausfinde. Ich hab es gegoogelt, aber irgendwie scheinen die Befehle rs.isSigned() o.ä. bei meinen Bibliotheken nicht dabei zu sein.
Es wäre auch echt noch mega hilfreich, wenn man rausfinden könnte, was man bei rs.getString("COLUMN_NAME") statt Column_Name noch so alles eingeben kann. Auch da hab ich ne Anleitung gefunden, aber auch diese Befehle finden sich in meinen Bibliotheken scheinbar nicht.
Jetzt hab ich aber ganz schön viel gefragt. Sorry.
Auf jeden Fall schon mal vielen Dank im Voraus.
MfG
LT
Zuletzt bearbeitet: