我开始在Android应用程序中首次访问sqlite数据库,到目前为止我可以添加到数据库,我可以更新数据库中的条目,我可以在数据库中显示每一位数据,但是我是什么我坚持的是如何获得一个条目(一个id及其所有相关行)。
要检索我使用此代码的所有行
数据库助手:
public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+table_name,null);
return res;
}
并在我的活动课程中调用它
public void viewallFunction() {
Cursor res = characterDB.getAllData();
if(res.getCount() == 0) {
showmessage("Error","no Data");
return;
} else {
StringBuffer buffer = new StringBuffer();
while (res.moveToNext()) {
buffer.append("Internal ID : " + res.getString(0) + "\n");
buffer.append("Player Name : " + res.getString(1) + "\n");
buffer.append("Character Name : " + res.getString(2) + "\n");
buffer.append("NickName : " + res.getString(3) + "\n");
buffer.append("Alignment : " + res.getString(4) + "\n");
buffer.append("Race : " + res.getString(5) + "\n");
}
showmessage("Data", buffer.toString());
}
}
当被调用时效果很好(实际上有81个条目,所以res.getString(0)一直到res.getString(80)为这篇文章修剪的函数)
根据我的理解*
:
Cursor res = db.rawQuery("select * from " + table_name, null);
表示所有列。
所以我在数据库助手中创建了这个方法:
public Cursor getOneData(int id) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select "+id+" from "+table_name,null);
return res;
}
并用
调用它public void getOneId(int id) {
Cursor res = characterDB.getOneData(id);
if(res.getCount() == 0){showmessage("Error","no Data");
return;}
else{
showmessage("test","retreived id "+res.getString(0)+" which is "+res.getString(1));
displaySheet(res.getString(0),
res.getString(1),
res.getString(2),
res.getString(3),
res.getString(4),
res.getString(5),
);}
}
再次为这篇文章修剪,显示表然后处理数据,但没有任何反应,我没有得到任何消息(我确定是不可能的,一个或另一个应该显示!)我做没有任何错误,只是没有任何反应,起初我认为该方法甚至没有解雇,但我把它重写为:
public void getOneId(int id){
showmessage("Message","id is "+id);
}
并且测试消息显示完美
让我完全难过,几个小时的谷歌搜索让我更加困惑,我看到的每个例子都非常专门针对正在制作的应用而定制,并且看起来没有像我的代码一样,如果所有显示方法都没有工作我会说啊哈哈有我的问题,但是我的所有显示方法都有效......而且这就是我在过去3或4天内学到的东西(天啊,请告诉我,我做错了)< / p>
所以,我做错了什么?
我是如何将一行检索为一组字符串?
作为参考,表格中的第一列设置为
ID INTEGER PRIMARY KEY AUTOINCREMENT
不确定这是否相关
编辑:数据库的结构如下:
1 "david" "zarr" "the great" "choatic" "human"
2 "george" "tod" "toddy" "lawful" "elf"
即:
int string string string string string
列名为:
ID PLAYERNAME CHARNAME NICKNAME RACE
我想要实现的目标是使用那个id行来检索字符串(然后我将edittext更改为,我知道那部分,但它正在获取那些我无法理解的字符串)
理想情况下,我只想对数据库说,给我ID为1的行中的所有字符串和数据库,在这里说你是他们的“大卫”“zarr”“伟大的”“choatic”“人类”< / p>
好的答案来自皮蒂
将数据库geto一个方法更改为:
public Cursor getOneData(int id){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+table_name+" WHERE ID='" + id + "'",null);
return res;
}
并更改了我用来调用它的方法:
public void getOneId(int id){
Cursor res = characterDB.getOneData(id);
if(res.getCount() == 0){showmessage("Error","no Data");
return;}
else{
if (res != null && res.moveToFirst()); do {
showmessage("test","retreived id "+res.getString(0)+" which is "+res.getString(1));
displaySheet(res.getString(0),
res.getString(1),
res.getString(2),
res.getString(3),
res.getString(4),
res.getString(5),
); } while (res.moveToNext()); }
}
答案 0 :(得分:1)
您正在查询中获取Id列,并且您想要整行一行使用此:
public Cursor getOneData(int id){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+table_name+" WHERE id='" + id + "'",null);
if (res != null && res.moveToFirst()) {
do {
//Call Your Function
}
while (res.moveToNext());
}
return res;
}