0

これは私のデータベースです:

@Database(name = GamersDatabase.NAME, version = GamersDatabase.version)
public class GamersDatabase {
        public static final String NAME = "and_roid";
        public static final int version = 1;
}

これが私のテーブルです:

@Table(database = GamersDatabase.class)
public class Gamers extends BaseModel{
        @PrimaryKey(autoincrement = true)
        int id;

        @Column@NotNull
        String name;
 }

これは、うまく機能する私の挿入ステートメントです (以下の select ステートメントが正しいリスト サイズを返すため)。

TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels()));
//insert          
SQLite.insert(Gamers.class).columns(Gamers_Table.name.getDefinition() ).values("ali").execute();

これは私のselect文です:

 List<Gamers> w = SQLite.select().from(Gamers.class).where(Gamers_Table.fName.eq("ali")).queryList();
 for (Gamers o : w) {
        // The problem is this part that I can't get gamer's name
        Toast.makeText(MainActivity.this, ""+o.toString(), Toast.LENGTH_SHORT).show();
 }

DBFlow がORMシステムの場合、オブジェクトを取得して、通常のsqlite cursor方法でゲーマー オブジェクトとして動作させるにはどうすればよいでしょうか? 質問が明確でない場合は、コメントを追加する必要があります。

昔ながらのデータベース手法では、次SQLiteのようなクエリを使用します。

Cursor c = db.getRawQuery("select * from tbl_gamers" , null);
if(c.moveToFirst()){
// fill object
}

次に、塗りつぶされたオブジェクトを使用します。DBFlow で取得したオブジェクトのフィールド (nameや などid) にアクセスするにはどうすればよいですか?

4

2 に答える 2

0

選択クエリで別のテーブルとフィールド名の両方を使用していることにかなり混乱しています。Workers テーブルの宣言された値を使用している場合、問題なく動作します。

List<Workers> workers = SQLite.select()
             .from(Workers.class)           
             .where(Workers_Table.name.eq("ali"))                    
             .queryList(); 

しかし、それは重要ではないと思います。多分あなたの問題は、Workers クラスのフィールドがパッケージ ローカルであることです。それらを公開するか、それらにアクセスする公開ゲッターを提供するだけです。

@Table(database = GamersDatabase.class)
public class Workers extends BaseModel{
        @PrimaryKey(autoincrement = true)
        public int id;

        @Column@NotNull
        public String name;
 }

私もDBFlowにはあまり詳しくありませんが、TransactionManagerは何もしないと思います。ここのドキュメントによると、保存したいモデルのリストを渡す必要があります。次のコードを使用して SaveModelsTransaction を使用する際に問題が発生した後、私にとってはうまくいきました。

 TransactionManager.transact(GamersDatabase.NAME, new Runnable() {
        @Override
        public void run() {
            Workers worker = new Workers();
            worker.name = "ali";
            worker.save();
        }
    });

うまくいけば、これはあなたを助けることができます.

よろしく、

アレックス

于 2016-01-27T21:05:44.887 に答える