看来您遇到了这个问题:https://bitbucket.org/xerial/sqlite-jdbc/issues/107/databasemetadatagetprimarykeys-does-not https://bitbucket.org/xerial/sqlite-jdbc/issues/107/databasemetadatagetprimarykeys-does-not
当前 JDBC 错误的解决方法
JDBC 驱动程序中的错误是与 SQL 字符串匹配的错误正则表达式。正则表达式要求之间至少有一个空格KEY
关键字和左括号。如果你这样写:
create table work_on (
s_id varchar(4),
p_id varchar(4),
x varchar(4),
primary key(s_id, p_id)
)
主键不会正确报告(因为当正则表达式无法匹配任何内容时,回退逻辑中存在另一个错误,该其他错误仅导致lastPK栏待报告)。因此,要解决此问题,您可以仔细设计表以始终具有此空白:
create table work_on (
s_id varchar(4),
p_id varchar(4),
x varchar(4),
primary key (s_id, p_id)
-- ^ whitespace here!
)
不使用 JDBC API 的解决方法
您始终可以自己在此处运行此查询(这是 JDBC 驱动程序的后备查询):
pragma table_info('work_on');
然后收集所有具有以下内容的行pk
标志设置为 true。例如下表
create table work_on (
s_id varchar(4),
p_id varchar(4),
x varchar(4),
primary key(s_id, p_id)
)
...产生以下输出:
+----+----+----------+-------+----------+----+
| cid|name|type |notnull|dflt_value| pk|
+----+----+----------+-------+----------+----+
| 0|s_id|varchar(4)| 0|{null} | 1|
| 1|p_id|varchar(4)| 0|{null} | 2|
| 2|x |varchar(4)| 0|{null} | 0|
+----+----+----------+-------+----------+----+