我正在尝试使用 greenDAO 对我的数据库模型中的字符串长度施加一定的限制。我会猜到这样的事情存在:
protected void addProperties(Schema inSchema, Entity inEntity) {
inEntity.addIdProperty();
inEntity.addStringProperty("description").notNull().maxLength(42);
}
我的第一个猜测是改变生成的 DAO 类(这里描述为另一个目的),如下所示:
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 常见问题解答
我能想出的唯一(丑陋的)解决方案是为 DAO-Object 编写另一个包装器。所以我的问题是:对于我正在尝试归档的内容是否有任何优雅的解决方案和/或是否有任何计划将其包含在 greenDAO 的未来版本中?