zoukankan      html  css  js  c++  java
  • Unique constraint on single String column with GreenDao2

    转:http://software.techassistbox.com/unique-constraint-on-single-string-column-with-greendao_384521.html

    I want to make unique constraint on String value with GreenDao. I have following piece of code:

    Entity category = schema.addEntity('Category');
    category.addIdProperty();
    category.addStringProperty('Name').notNull();

    How can I make sure that Name will be unique?

    My tries:

    I have found methods PropertyBuilder.unique() and PropertyBuilder.index() but none of this works.

    index() doesn't work at all and allows to make duplication. unique() throws exception in Robolectric test but don't do anything when app runs on device Robolectric exception:

    android.database.sqlite.SQLiteException: Cannot execute for last inserted row ID, base error code: 19
        at org.robolectric.shadows.ShadowSQLiteConnection.rethrow(ShadowSQLiteConnection.java:48)
        at org.robolectric.shadows.ShadowSQLiteConnection.access$500(ShadowSQLiteConnection.java:26)
        at org.robolectric.shadows.ShadowSQLiteConnection$Connections.execute(ShadowSQLiteConnection.java:436)
        at org.robolectric.shadows.ShadowSQLiteConnection.nativeExecuteForLastInsertedRowId(ShadowSQLiteConnection.java:239)
        at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(SQLiteConnection.java)
        at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
        at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
        at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
        at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:348)
        at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293)

    So far I have made something like this but I don't think it's the best solution. 

    However if this correct, is it good idea to add index() to name Property to get better performance?

     

    public Long insert(Category category) {
        if (getByName(category.getName()) != null) {
            throw new DuplicateCategoryNameException(category.getName());
        }
        ...
    }
    
    public Category getByName(String name) {
        return categoryDao.queryBuilder().where(CategoryDao.Properties.Name.eq(name)).build().unique();
    }
  • 相关阅读:
    分享,如何激励程序员?
    [经验交流] (最新)移动App应用安全漏洞分析报告 !
    最全最热【资源汇总】Android应用解决方案全攻略
    最赚钱十大行业 网络编辑3G工程师入选
    分享:Android Studio 导入第三方jar包,重复加载错误解决办法。
    分享:怎么去测试一个 app 是否存在安全问题?
    Android系统刷机后第一次启动很慢的原因
    转载分享:Android APP二次打包操作步骤介绍
    Android开发之HelloWorld程序
    安卓源码总体结构(2)基础知识汇总
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3935919.html
Copyright © 2011-2022 走看看