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();
    }
  • 相关阅读:
    CCF CSP 201503-1 图像旋转
    CCF CSP 201403-1 相反数
    CCF CSP 201312-1 出现次数最多的数
    CCF CSP 201703-3 Markdown
    CCF CSP 201709-3 JSON查询
    CCF CSP 201709-2 公共钥匙盒
    CCF CSP 201709-1 打酱油
    CCF CSP 201604-4 游戏
    CCF CSP 201604-1 折点计数
    CCF CSP 201612-1 中间数
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3935919.html
Copyright © 2011-2022 走看看