java - Access DB 自动增量不允许我打开表

标签 java database ms-access jdbc ucanaccess

我刚刚成功连接到本地 .accdb Access 数据库,现在正在尝试创建我的表。我使用 Java 运行这两行,并且在运行这些 SQL 命令期间没有错误:

Statement st = d.createStatement();
st.executeUpdate("CREATE TABLE suppliers ( [name] TEXT(255), [adress] TEXT(255), [ID] AUTOINCREMENT PRIMARY KEY);");
st.executeUpdate("CREATE TABLE quality ( [name] TEXT(255) );");
st.close();

但是现在,当我想使用 Microsoft Access 打开刚刚创建的表时,两个生成的表之间存在差异。

我可以正常打开表“quality”并插入一些值。

现在,如果我尝试打开“供应商”,我会收到此错误消息:

error message

它是德语,意思是“无法打开数据库''。您的应用程序无法识别数据库,或者文件已损坏。”

所以我尝试删除“[ID] AUTOINCRMENT PRIMARY KEY”,没有它它也可以正常工作。所以错误肯定是由“AUTOINCRMENT”引起的。

为了连接数据库,我使用 ucanacess:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
c = DriverManager.getConnection("jdbc:ucanaccess://C:/bin/Test.accdb");

我的“自动增量”是否做错了什么?

最佳答案

我可以使用 UCanAccess 4.0.2 重现您的问题。它似乎与最后指定的 [ID] 列有关。也就是说,这会导致问题:

sql = "CREATE TABLE suppliers ( [name] TEXT(255), [adress] TEXT(255), [ID] AUTOINCREMENT PRIMARY KEY)";

...但是按此顺序指定列可以正常工作:

sql = "CREATE TABLE suppliers ([ID] AUTOINCREMENT PRIMARY KEY, [name] TEXT(255), [adress] TEXT(255))";

我会将这些信息传递给 UCanAccess 开发团队。

关于java - Access DB 自动增量不允许我打开表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43724239/

相关文章:

java - 打印输入行中有多少对第一个字符小于第二个字符的字符

java - 如何使用 Hibernate 尽可能快地插入数据

sql-server - 将数据库数据从多个 DB 复制到一个。数据复制(某种)

vb.net - 每次操作后关闭 Access 数据库还是保持打开状态以供以后操作更好

java - 我不明白如何解决语法错误

java - 更改 executorservice 中的延迟

java - 如何在本地计算机上启动logback + logstash?

mysql - 在sql中只向表中添加一个值

ms-access - Access VBA : What is the difference between dao. 记录集 vs 记录集?

vba - 使用 VBA 以编程方式安装 Microsoft Access 加载项