2016-12-14 4 views
2

Ich habe ein funktionierendes Java-Projekt, das eine Access .accdb-Datenbank verwendet, um Daten zu speichern. Ich arbeite an einem Update für mein Programm, um mehr Funktionen für den Benutzer bereitzustellen. Damit dies funktioniert, muss ich eine Spalte zu einer vorhandenen Tabelle hinzufügen, die mit Daten gefüllt ist. Wie ich recherchiert habe ich herausgefunden, dass UCanAccess nichtUCanAccess: Spalte zu vorhandener Tabelle hinzufügen

ALTER TABLE TableName ADD ColumName DataType 

Dies ist bedauerlich, unterstützen könnte, aber ich verstehe, dass, da die niedrigen Level-Treiber diese Funktion nicht unterstützen, UCanAccess kann es auch nicht unterstützen.

Ich fand dann diese Abhilfe:

How to alter table using UCanAccess

aber das wird für mich auch nicht arbeiten, weil 1. Ich bin mit .accdb und 2. Ich kann nicht sicher sein, haben die Benutzer Microsoft Access ist installiert.

Dann hatte ich die Idee, die aktuelle Tabelle mit 1 zusätzlichen Spalte zu klonen, alle Daten darin zu klonen, die alte zu löschen und die neue in den Namen der alten umzubenennen. Aber ich weiß nicht, wie ich das machen soll.

Kennt jemand einen besseren Weg oder weiß, wie man meine Idee umsetzt?

Antwort

3

Jackcess 2.1.5 hat die Möglichkeit hinzugefügt, einer vorhandenen Tabelle eine neue Spalte hinzuzufügen. Es gibt Pläne, die DDL-Unterstützung in UCanAccess zu erweitern, um ALTER TABLE zu aktivieren, aber in der Zwischenzeit können Sie Ihre Spalte hinzufügen, wenn Sie Ihr Projekt für die Verwendung von Jackcess 2.1.5 oder höher (anstelle der früheren Jackcess-Version im Ordner UCanAccess lib/) aktualisieren so wie:

// use the Jackcess (2.1.5 or later) API directly 
// to add a column to an existing table 
// 
// Note: Close any open UCanAccess connection first. 
// 
com.healthmarketscience.jackcess.Database db = 
     com.healthmarketscience.jackcess.DatabaseBuilder.open(new File(dbFileSpec)); 
new com.healthmarketscience.jackcess.ColumnBuilder("newCol") 
     .setType(com.healthmarketscience.jackcess.DataType.LONG) 
     .addToTable(db.getTable("TableName")); 
db.close(); 

Update: Januar 2017

UCanAccess Versionen 4.0.0 und höher unterstützen jetzt ALTER TABLE, zB

Statement stmt = conn.createStatement(); 
stmt.execute("ALTER TABLE TableName ADD COLUMN newCol LONG"); 
+0

Diese soun DS gut, kann ich den Jackcess mit UCanAccess noch arbeiten? – Mattizin

+1

Mir sind keine Änderungen an Jackcess bekannt, die zu Problemen mit UCanAccess führen könnten. –

+1

Dies funktioniert super danke :) – Mattizin

Verwandte Themen