这是我的db:
@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();
这是我的选择陈述:
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
)?
答案 0 :(得分:0)
我很困惑您在选择查询中同时使用不同的表和字段名称。如果我使用Workers表的声明值,它对我来说很好。
List<Workers> workers = SQLite.select()
.from(Workers.class)
.where(Workers_Table.name.eq("ali"))
.queryList();
但我猜这不是重点。也许你的问题是Workers类的字段是package-local。只需将它们公开或提供公共访问者即可访问它们。
@Table(database = GamersDatabase.class)
public class Workers extends BaseModel{
@PrimaryKey(autoincrement = true)
public int id;
@Column@NotNull
public String name;
}
请注意,我对DBFlow也不是很熟悉,但我认为您的TransactionManager没有做任何事情。根据{{3}}的文档,您应该传递要保存的模型列表。 使用SaveModelsTransaction使用以下代码的一些问题对我来说很好:
TransactionManager.transact(GamersDatabase.NAME, new Runnable() {
@Override
public void run() {
Workers worker = new Workers();
worker.name = "ali";
worker.save();
}
});
希望,这可以帮助你。
此致
亚历
答案 1 :(得分:0)
我也在努力解决这个问题。这里的列表包含一种指针或存储在内存中的对象的位置(我不确定),如:
Workers List:
[com.example.workers.receiver.schema@1a4b1622,
com.example.workers.receiver.schema@1302f8b3,
com.example.workers.receiver.schema@d7c9e70,]
以上是终端上的输出:
Log.d(TAG, "Workers List: "+w);
您将能够使用以下方式在日志中打印数据:
List<Gamers> w = SQLite.select()
.from(Gamers.class)
.where(Gamers_Table.name.eq("ali"))
.queryList();
for (int i=0;i<w.size();i++) {
Log.d(TAG, ""+w.get(i).name);
}
如果您的@Column元素是公共的,则运行上面的代码。如果它们是私有的,你需要为它们制作合适的getter和setter函数,你可以使用以下代码来检索数据:
List<Gamers> w = SQLite.select()
.from(Gamers.class)
.where(Gamers_Table.name.eq("ali"))
.queryList();
for (int i=0;i<w.size();i++) {
Log.d(TAG, ""+w.get(i).getName());
}
假设getName()是一个getter函数。您可以返回列表w并有更多用法。