10

greenDao データベースを作成するときにデフォルト値を追加する可能性はありますか?

Example:
Property pictureIdProperty = user.addLongProperty("pictureId").getProperty();
Property thumbnailIdProperty = user.addLongProperty("thumbnailId").getProperty();
//and here I need something like this:
//thumbnailIdProperty.setDefault(-1); //there is possible to add 
user.addToOne(picture, pictureIdProperty);
user.addToOne(picture, thumbnailIdProperty, "thumbnail");

データベースとこのテーブルを使用している場合、このモデルを作成するときに常にデフォルト値を追加する必要はありません。

4

1 に答える 1

6

今日の時点で、これに対する GreenDAO プロジェクトによる正式なサポートはないと思いますが、考えはあります。Sqlite は、列に適用できるDEFAULTテーブル制約をサポートしています。たとえば次のコード ブロックはCity、表の列のデフォルト値Personsが「Sandnes」であることを示しています。

    CREATE TABLE Persons
    (
      P_Id int NOT NULL,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255) DEFAULT 'Sandnes'
    )

sqlite が制約をサポートしていることがわかれば、生成されたクラスDefaultをハッキングできます。例としてOrderDAO.javaDAOを使用します。以下のスニペットは、GreenDAO によって生成されたコードコード ブロックです。create table

    public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
        String constraint = ifNotExists? "IF NOT EXISTS ": "";
        db.execSQL("CREATE TABLE " + constraint + "'ORDERS' (" + //
               "'_id' INTEGER PRIMARY KEY ," + // 0: id
               "'DATE' INTEGER," + // 1: date
               "'CUSTOMER_ID' INTEGER NOT NULL );"); // 2: customerId
    }

これで、制約をサポートするためにこれを変更できる可能性が高くなります。DEFUALTを追加して、上記のコード ブロックの最後の関連行を変更しDEFAULT(-1)ます。

    "'CUSTOMER_ID' INTEGER NOT NULL DEFAULT(-1));"); // 2: customerId

注: この変更をテストするときは、データベースが再作成されるように、sqlite スキーマ バージョンをインクリメントするか、アプリを再インストールしてください。

于 2013-10-07T16:36:21.940 に答える