Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SQLite下的ORMLite中创建外键约束_Android_Sqlite_Ormlite - Fatal编程技术网

Android 在SQLite下的ORMLite中创建外键约束

Android 在SQLite下的ORMLite中创建外键约束,android,sqlite,ormlite,Android,Sqlite,Ormlite,由于无法在SQLite中使用“ALTER TABLE”语句添加外键,因此我一直在研究如何配置数据库以强制执行有效的外键,或者在没有显式代码开销的情况下执行级联删除 有人知道如何在SQLite下使用ORMLite实现这一点吗 如何配置我的数据库以强制执行有效的外键,或在没有显式代码开销的情况下执行级联删除 ORMLite支持@databasefieldannotation@Timo中的columnDefinition=“…”字段。我不确定它是否为您提供了所需的功能,但它确实允许您自定义列定义 如

由于无法在SQLite中使用“ALTER TABLE”语句添加外键,因此我一直在研究如何配置数据库以强制执行有效的外键,或者在没有显式代码开销的情况下执行级联删除

有人知道如何在SQLite下使用ORMLite实现这一点吗

如何配置我的数据库以强制执行有效的外键,或在没有显式代码开销的情况下执行级联删除

ORMLite支持
@databasefield
annotation@Timo中的
columnDefinition=“…”
字段。我不确定它是否为您提供了所需的功能,但它确实允许您自定义列定义


如果没有,那么在这种情况下,恐怕您必须在外部创建数据库。您可以使用
TableUtils.getCreateTableStatements()
获取创建表所需的语句,并添加所需的强制和级联语句。下面是.

要详细说明Gray令人敬畏的答案(对于其他偶然发现此问题的人),您可以使用
columnDefinition
注释定义外键约束和级联删除

首先,在3.6.19中,外键约束被添加到SQLite中,这意味着您可以在Android 2.2或更高版本中使用它们(因为2.2附带SQLite 3.6.22)。但是,默认情况下不启用外键约束。要启用它们,请使用中的技术

下面是一个使用
columnDefinition
注释的示例。这假设您正在引用的表/对象称为
parent
,其主键为
id

@DatabaseField(foreign = true,
      columnDefinition = "integer references parent(id) on delete cascade")
private Parent parent;

请注意,字符串值的格式不包括列名(这就是注释的目的)。

我认为下一个链接可能会有所帮助:

简而言之,您可以将其设置为:

public class Person {
...
@DatabaseField(columnName = "organization_id", canBeNull = false)
private Organization m_organization;
这样,Person对组织有一个外键,它在组织上使用的键是“Organization\u id”


希望这能有所帮助。

我找到了getCreateTableStatements()解决方案,它的效果非常好。谢谢你的回答。你可以发布一个例子,如何使用外键约束的columnDefinition吗?这并没有解释如何使用级联删除创建约束。@KenVanHoeylandt我实际上不记得这个答案和问题。很抱歉