我想从数据库中通过id获取记录? 如果我点击listview行中的编辑按钮,我想从数据库编辑整个记录。
答案 0 :(得分:1)
没有代码,我无法帮助你,但我认为你没有方向或路线图。让我告诉你路线图,以便你知道如何实现你想做的事情:
在列表视图上实现click侦听器。点击应该根据您的需要,如简单点击或长按或你得到设置项目点击监听器。
在点击列表器中,您可以轻松获取索引并使用索引从模型类中获取项目ID(如果您有自定义适配器和数组)
现在您拥有了获得Id的索引,Id是数据库中从行获取数据的关键。所以你有id你可以获取数据并将数据显示到用户可以编辑这些值的活动中
这只是演示代码,所以你可以得到这个想法,在我的情况下我在数据库中有这个功能而且我正在以下列方式获取/检索数组列表
public ArrayList GetData(String Name){
ArrayList<Detail> list = new ArrayList<Detail>(); cursor = db.rawQuery("select * from MosqueDataNew where Name = '" + Name + "'", null); if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); list.add(new Detail( cursor.getString(cursor.getColumnIndex("ID")), cursor.getString(cursor.getColumnIndex("Name")), cursor.getString(cursor.getColumnIndex("LatitudeLocation")), cursor.getString(cursor.getColumnIndex("LongitudeLocation")), cursor.getString(cursor.getColumnIndex("Size")))); return list; } return null; }
所以这是了解如何从特定行检索数据的方法。
public boolean UpdateData(ContentValues contentValues,String id){
if (db.update("YourTableName", contentValues, "ID = '" + id + "'", null) > 0) {
return true;
}
return false;}
内容值是您要在该位置保存的新更新值。
第2部分 由于您希望通过单击每行的按钮来编辑新活动中的值,因此如果在创建适配器时将上下文传递给适配器,则可以实现此目的,因为要打开要用于编辑的新活动。值,你必须有上下文来开始一个新的活动,这就是你如何做到的:
public class MyAdapter extends Adapter {
private Context context;
public MyAdapter(Context context) {
this.context = context;
}
public View getView(...){
View v;
v.setOnClickListener(new OnClickListener() {
void onClick() {
context.startActivity(...);
}
});
}
}
因此您可以在此处看到您正在使用启动要打开的活动,因此现在很清楚如何导航到新活动,但在此之前您需要从数据库中获取所有数据以进行编辑,这就是在打开新活动之前按钮点击的方式
在适配器的getView方法中,您必须放置适用于每一行的单击侦听器,您需要获取项目列表的ID,然后将其传递给数据库函数,该函数获取特定Id的所有数据
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//get id of itemlist , or array what ever datamodel you are using and use it to fetch the data from the database
}
});
编辑第3部分
如果你想在id的基础上得到数据,那么数据库的上层定义函数会稍微改变一下,这是怎么回事
public ArrayList GetData(String id) {
ArrayList<Detail> list = new ArrayList<Detail>();
cursor = db.rawQuery("select * from MosqueDataNew where id = '"
+ ID + "'", null);
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
list.add(new Detail(
cursor.getString(cursor.getColumnIndex("ID")),
cursor.getString(cursor.getColumnIndex("Name")),
cursor.getString(cursor.getColumnIndex("LatitudeLocation")),
cursor.getString(cursor.getColumnIndex("LongitudeLocation")),
cursor.getString(cursor.getColumnIndex("Size"))));
return list;
}
return null;
}
更新第5部分
如果您需要获取更改查询所需的特定行,那么现在已经使方法从数据库中获取所有数据
// get userlist
public List<UserList> getuserlistRow(String id) {
String selectQuery = "SELECT firstname , lastname"
+ DATABASE_TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * From YOUR_TABLE_NAME where id="'id'"", null);
List<UserList> userlist = new ArrayList<UserList>();
if (cursor.moveToFirst()) {
do {
UserList list = new UserList();
list.setId(Integer.parseInt(cursor.getString(0)));
list.setFirstname(cursor.getString(3));
list.setLastname(cursor.getString(4));
userlist.add(list);
} while (cursor.moveToNext());
}
return userlist;
}
现在点击按钮,你可以做这个ArrayList myList = new ArrayList(getuserlistRow(id));
Toast.makText(your_context,&#34;&#34 + myList.toString(),Toast.LENGTH_LONG).show():
注意强>
上面的行和共享代码可能有语法错误我刚刚给你的想法,你可以轻松地在互联网上搜索语法。
因此,通过这种方式,您可以获得完整记录中的所有数据,此方法将数据返回到我的数据类型的数组列表中,即&#34;详细信息&#34;在我的情况下,您可以转换为您的数据类型。
我希望这有助于您了解如何做到这一点。