2016-12-14 30 views
2

データを保存するためにAccess .accdbデータベースを使用する作業中のJavaプロジェクトがあります。 私は、ユーザーのためのより多くの機能を提供するために私のプログラムのアップデートに取り組んでいます。 これを動作させるには、データが入っている既存のテーブルにカラムを追加する必要があります。 私はUCanAccessがUCanAccess:既存のテーブルに列を追加する

ALTER TABLE TableName ADD ColumName DataType 

をサポートしていなかったことが分かった研究としてこれは残念なことですが、私は、低レベルのドライバがそれをサポートしていないことから、UCanAccessはどちらかそれをサポートすることができないことを理解しています。

私は、この回避策が見つかりました:

How to alter table using UCanAccess

をしかし、私は、ユーザーが持っていることを確認することはできません1.私はの.accdbを使用し、2てるので、これは、いずれかの私のために動作しません。 Microsoft Accessがインストールされています。

次に、現在のテーブルを1つの余分な列で複製し、すべてのデータを複製し、古いものを削除し、新しいものを古いものの名前に変更するという考えがありました。しかし、私はこれを行う方法を知らない。

誰かが良い方法を知っているか、自分のアイデアを実装する方法を知っていますか?

答えて

3

Jackcess 2.1.5では、既存のテーブルに新しい列を追加する機能が追加されました。 ALTER TABLEを有効にするためにUCanAccessでDDLサポートを拡張する計画がありますが、その間に(UCanAccess lib/フォルダの以前のJackcessバージョンの代わりに)Jackcess 2.1.5以降を使用するようにプロジェクトを更新する場合は、

// 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(); 

更新:そうのような2017年1月

UCanAccessバージョン4.0.0以上が今ALTER TABLEをサポートし、例えば、

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

このSOUN ds good、UCanAccessを使ってジャケッスを更新できますか? – Mattizin

+1

私はUCanAccessに問題を引き起こすと予想されるJackcessの最近の変更について知らない。 –

+1

これはすばらしいおかげです:) – Mattizin

関連する問題