Не пустое ограничение, не навязанное мс доступом после создания таблицы с UCanAccess
Это продолжение этого вопроса. Ошибка немного отличается с новой версией UCanAccess сейчас.
Я создаю файл базы данных с таблицей, содержащей столбец NOT-NULL, используя последнюю версию UCanAccess (4.0.3, включая Jackcess 2.1.9), подобную этой
// Create a database + connect
DatabaseBuilder.create(FileFormat.V2010, new File(path));
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
conn = DriverManager.getConnection("jdbc:ucanaccess://" + path + ";singleconnection=true" ,"", "");
// Create table
String sql = "CREATE TABLE Test (id AUTOINCREMENT PRIMARY KEY, value CHAR(1) NOT NULL)";
conn.createStatement().executeUpdate(sql);
Попытка вставить значения работает нормально с помощью UCanAccess, NULL отклоняется для столбца "значение" UCanAccess, как и ожидалось. Однако, когда я использую таблицу в Access напрямую, NULL принимается! Работа с данными через UCanAccess позже приводит к проблемам, так как таблица не может быть записана в:
ВНИМАНИЕ: Обнаружено нарушение ограничения Not Null, таблица Test, строка строки [87:1][{id=2,value=}]: создание таблицы Test только для чтения
Открытие и сохранение таблицы из представления конструктора в Access решает проблему, но не является долгосрочным вариантом. Как заставить Access соблюдать ограничение NOT-NULL?
1 ответ
Это было связано с известной проблемой с Jackcess 2.1.10. Это должно быть исправлено в следующих выпусках Jackcess и UCanAccess, соответственно.