2016-09-24 2 views
0

AndroidのSQLiteデータベースでデータを作成して取得しようとしています。queryForAllはORMLiteでヌルIDを返します

メソッドを作成してデータを追加すると、オブジェクトが正しく更新されます(ロングIDが設定されます)。しかし、queryAllメソッドでデータを取得すると、ヌルとなるid属性以外のオブジェクトが正しく返されます。 私がtrueに設定さgeneratedId属性を持つデータベースフィールドタグを使用しています、ただのドキュメントのように述べている:

は、フィールドが自動生成されたidフィールドであるかどうかをブール

をgeneratedId。デフォルトは falseです。クラス内でこのセットを持つことができるフィールドは1つだけです。これは、 データベースに、挿入されたすべての行の対応するIDを自動生成するように指示します。 generated-idを持つオブジェクトがDao.create() メソッドを使用して作成されると、データベースは、 になるオブジェクトのidを生成し、createメソッドでオブジェクトに設定します。一部のデータベース では、生成されたIDのシーケンスが必要です。この場合、シーケンス名 が自動生成されます。シーケンスの名前を指定するには、 generatedIdSequenceを使用します。 this、id、およびgeneratedIdSequenceのいずれか1つのみが に指定できます。 See section generatedIdを持つフィールド。

私のクラスがあります:

@DatabaseTable(tableName = "LANGUAGE") 
public class Language { 

    @DatabaseField(generatedId = true, columnName = "language_id") 
    private Long id; 

    @DatabaseField(columnName = "language_locale") 
    private String locale; 

    @DatabaseField(columnName = "language_active") 
    private boolean active; 

    @DatabaseField(columnName = "language_name") 
    private String name; 

    // getters and setters... 

} 

私はこのようなデータを挿入しています:

Language pt = new Language(); 
pt.setActive(true); 
pt.setName("Português"); 
pt.setLocale("pt_PT"); 
dao.create(pt); 

Language en = new Language(); 
en.setActive(true); 
en.setName("English"); 
en.setLocale("en_EN"); 
dao.create(en); 

// here, both pt and en have an id, 1 and 2, respectively 

しかし、ときに私は

dao.queryForAll() 

ロケール、アクティブおよび名前の属性を実行しますOKですが、idはnullです。

イデアはありますか?私はすでにをコミットの後にの後にを作成しようとしましたが、何も変わりません。

+0

データベース設定ファイルが完全に更新されていますか?私はこれを見たことも聞いたこともなく、特にIDフィールドではこれを見たことがありません。 'dao.queryForId(...)'は動作しますが、idを埋めていないのでしょうか? – Gray

+0

queryForId(たとえば、id 1を渡す)はnullを返します。それは非常に奇妙なことですが、createメソッドがその仕事をしているようですが、idを持たないエンティティをデータベースに格納しているようです...私の経験では、ちょっとした間違いがありますが、試行錯誤でしか見つかりません...ありがとう – rmpt

+0

idはcreateメソッドによって正しく/逐次的に割り当てられているので、エンティティは実際にデータベースにあるようです。キャッシュに問題があると思いますか? – rmpt

答えて

0

最後に動作させました。ゲスト何?データを消去してアプリをアンインストールするだけですぐに使えます。私に正確に理由を聞かないでくださいが、idアノテーションとは何か関係があります。最初に私が使用していた:

@DatabaseField(id = true, allowGeneratedIdInsert = true, columnName = "language_id") 

がエラーを与える、私は別の組み合わせに変更しましたし、どこか途中でデータベースがいくつかのプロパティを使用して作成する必要があります。その後、私は私の質問に示された構成に変更しましたが、私が説明したように動作していませんでした。私の携帯電話でアプリケーションを整理した後、すべてを最初から作成しなければならず、データベースは最終的に正しいプロパティで作成されました。

今後、データベースがデータを正しく保存したり読み込んだりしない場合は、アプリをクリアしてアンインストールしてください。

関連する問題