2016-12-14 8 views
2

У меня есть рабочий проект Java, который использует базу данных Access .accdb для хранения данных. Я работаю над обновлением моей программы, чтобы предоставить больше возможностей для пользователя. Для этого мне нужно добавить столбец в существующую таблицу, заполненную данными. Как я исследовал, я обнаружил, что 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 добавила возможность добавления нового столбца в существующую таблицу. Планируется расширить поддержку DDL в UCanAccess, чтобы включить ALTER TABLE, но в то же время, если вы обновите проект для использования Jackcess 2.1.5 или новее (вместо более ранней версии Jackcess в папке UCanAccess lib/), вы можете добавить свою колонку как так:

// 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

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

Я не знаю недавних изменений в Jackcess, которые, как ожидается, вызовут проблемы с UCanAccess. –

+1

Это отлично работает :) – Mattizin