Мне нужна помощь в рутине, которую я написал, чтобы сбросить содержимое класса (представляющего таблицу базы данных) в новую таблицу базы данных в MS Access , Мой код выглядит следующим образом:Получение java.lang.IllegalArgumentException: недопустимый размер фиксированной длины, с использованием библиотеки Jackcess
public void dumpDB() throws IOException, Exception {
// for each table
for (String tableName : this.DB.getTablesNames()) {
System.out.println(tableName);
int nColumns = 0;
ModelDatabaseTable table = this.DB.getTable(tableName);
// create a tablebuilder
TableBuilder DBTableBuilder = new TableBuilder(tableName);
// get datatypes of columns
Map<String, DataType> columns = table.getColumns();
// for each column
for (String columnName : columns.keySet()) {
System.out.println(columnName);
// get its datatype
DataType dt = columns.get(columnName);
// create a column with correspondent datatype and max length and add it
// to the table builder
ColumnBuilder cb = new ColumnBuilder(columnName).setType(dt).setMaxLength();
DBTableBuilder.addColumn(cb);
nColumns += 1;
}
// if table has columns
if (nColumns > 0) {
// save it to the actual database: Exception rises here
Table DBTable = DBTableBuilder.toTable(this.DBConnection);
// copy all table's rows
for (ModelDatabaseRow row : table.getRows()) {
List<String> values = new ArrayList<String>();
for (String columnName : columns.keySet()) {
String columnValue = row.getColumn(columnName);
values.add(columnValue);
}
DBTable.addRow(values.toArray());
}
}
}
}
Когда я пытаюсь сохранить таблицу фактической базы данных, я получаю исключение:
java.lang.IllegalArgumentException: invalid fixed length size
at com.healthmarketscience.jackcess.ColumnBuilder.validate(ColumnBuilder.java:361)
at com.healthmarketscience.jackcess.impl.TableCreator.validate(TableCreator.java:207)
at com.healthmarketscience.jackcess.impl.TableCreator.createTable(TableCreator.java:130)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.createTable(DatabaseImpl.java:954)
at com.healthmarketscience.jackcess.TableBuilder.toTable(TableBuilder.java:223)
at modelDatabase.AccessModelDatabaseBuilder.dumpDB(AccessModelDatabaseBuilder.java:153)
at modelDatabase.AccessModelDatabaseBuilder.main(AccessModelDatabaseBuilder.java:37)
Datatypes были сохранены, прежде чем использовать ту же базу данных я пишу (я я в основном обновляю базу данных), используя код:
for (Column column : DBTable.getColumns()) {
table.addColumn(column.getName(), column.getType(), "");
}
Что я делаю неправильно?
Спасибо, что пришли обратно, чтобы обновить это. После запуска некоторого тестового кода я только что пришел к такому же выводу. –
Да :) Спасибо за усилие. – gc5
Основная проблема будет исправлена в следующей версии Jackcess (2.0.9). Ссылка: [здесь] (http://sourceforge.net/p/jackcess/bugs/116/). После того, как это было выпущено, вышеупомянутое обходное решение больше не потребуется. –