【发布时间】:2013-11-14 07:41:46
【问题描述】:
我正在尝试使用 greenDAO 对我的数据库模型中的字符串长度施加一定的限制。我会猜到这样的事情存在:
protected void addProperties(Schema inSchema, Entity inEntity) {
inEntity.addIdProperty();
inEntity.addStringProperty("description").notNull().maxLength(42);
}
我当时的第一个猜测是更改生成的 DAO 类(描述为 here 用于其他目的),如下所示:
public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "'TEST' (" + //
"'_id' INTEGER PRIMARY KEY ," +
"'DESCRIPTION' VARCHAR(42) NOT NULL );");
}
然后我发现SQLite本身甚至不支持字符串的限制:
“SQLite 不强制 VARCHAR 的长度。你可以声明一个 VARCHAR(10),SQLite 很乐意让你在其中放入 500 个字符。它会保持所有 500 个字符的完整性——它永远不会被截断。”来自SQLite FAQ
我能想出的唯一(丑陋的)解决方案是为 DAO-Object 编写另一个包装器。所以我的问题是:对于我正在尝试归档的内容是否有任何优雅的解决方案和/或是否有任何计划将其包含在 greenDAO 的未来版本中?
【问题讨论】:
-
我相信您在自己实现字符串长度执行逻辑时遇到了困难。正如您在帖子中所说,sqlite 不会强制执行它,greenDAO 也不提供该功能。我会说你的解决方案是最好的选择。
-
我建议您在 GreenDao 存储库中打开一个问题以建议此功能。