我有一个最初使用 SQLite 开发的小型数据库。当用户最初启动应用程序时,我的桌面应用程序会自动设置数据库表。
问题 几个表有 FOREIGN KEY 约束。假设我有表 A、表 B 和表 C。A 与 C 有 FOREIGN KEY 约束。但是当我进行初始表生成时,每次都会抛出 SQLExceptions 说如下内容:
约束“SQL130319142644383”无效:引用的表 PREDICTIONRUN 不存在。
(注意:由于其他外键问题,我不能简单地重新组织表。)
那么,如何创建具有 FOREIGN KEY 约束的表呢?
例子
if (! this.checkIfTableExists("DocumentClassification", conn)) {
sql.setLength(0) ;
sql.append("CREATE TABLE DocumentClassification ( " ) ;
if (dbtype.equalsIgnoreCase("javadb")) {
sql.append(" classificationid INTEGER PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) , " ) ;
} else {
sql.append(" classificationid INTEGER PRIMARY KEY, " ) ;
}
sql.append(" classid INTEGER, " ) ;
sql.append(" documentid INTEGER, " ) ;
sql.append(" predictionrunid INTEGER, " ) ;
sql.append(" matterid VARCHAR(512), " ) ;
sql.append(" datereadable VARCHAR(2048), " ) ;
sql.append(" date BIGINT, " ) ;
sql.append(" note VARCHAR(" + maxint + "), " ) ;
sql.append(" FOREIGN KEY ( classid) REFERENCES Classes (ClassID)," ) ;
sql.append(" FOREIGN KEY ( documentid) REFERENCES MatterDataset (id), " ) ;
sql.append(" FOREIGN KEY (predictionrunid) REFERENCES PredictionRun (predictionrunid)" ) ;
sql.append(" ) " ) ;
// Create the table
sqlstatement.executeUpdate(sql.toString());
}
使用的数据库 JavaDB/Derby SQLite(通过 Xerial 驱动程序)(这里没有问题,因为 SQLite 似乎没有强制执行创建约束)
开发 Java 7