根据他们的发行说明,Xerial SQLite JDBC驱动程序支持自3.6.20.1版以来的外键。我现在已经尝试了一段时间来强制执行外键约束,但无济于事。以下是我提出的建议:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.sqlite.JDBC");
SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(true);
Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:", config.toProperties());
connection.createStatement().executeUpdate(
"CREATE TABLE artist(" +
"artistid INTEGER PRIMARY KEY, " +
"artistname TEXT);");
connection.createStatement().executeUpdate(
"CREATE TABLE track("+
"trackid INTEGER," +
"trackname TEXT," +
"trackartist INTEGER," +
"FOREIGN KEY(trackartist) REFERENCES artist(artistid)" +
");");
connection.createStatement().executeUpdate(
"INSERT INTO track VALUES(14, 'Mr. Bojangles', 3)");
}
表格定义直接取自SQLite documentation中的样本。这应该是失败的,但事实并非如此。我也检查了,它确实插入了元组(没有忽略或类似的东西)。
有没有人有这方面的经验,或知道如何使它有效?
更新
我有一个为他们竞选的testcase from Xerial,但对我来说失败了。所以代码没有问题,但可能是设置。我在Mac OS上运行,并且安装了SQLite 3.6.12(无外键)。他们的图书馆有可能使用它吗?我怎么检查这个?如果是这样,我怎么能让它使用另一个版本?
答案 0 :(得分:0)