Android中如何将数据库Name=saqib的ID值显示到EditText?
解决Android中从SQLite查询指定Name对应的ID并显示到EditText的问题
你现在的核心问题是直接把Cursor对象转成字符串显示了——res.toString()返回的只是Cursor这个对象的内存描述,根本不是数据库里的ID值。咱们得从Cursor结果集里提取实际数据,再设置到EditText里。
第一步:修改按钮点击事件代码
把原来的点击事件逻辑改成这样,处理Cursor并提取ID:
final EditText i=(EditText)findViewById(R.id.id_etxt); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Cursor res = mydatabase.fet(); // 先判断Cursor是否有效且包含数据 if (res != null && res.moveToFirst()) { // 通过列名获取ID列的索引,再提取对应的值 int idColumnIndex = res.getColumnIndex("ID"); int targetId = res.getInt(idColumnIndex); // 把整数ID转成字符串,设置到EditText i.setText(String.valueOf(targetId)); // 用完Cursor一定要关闭,避免内存泄漏 res.close(); } else { // 如果没找到匹配的数据,显示提示信息 i.setText("未找到对应ID"); } } });
第二步:优化数据库查询方法(可选但推荐)
你的fet()方法用了getWritableDatabase(),但查询操作其实用getReadableDatabase()更合适,它会优先返回只读数据库连接,性能更优:
public Cursor fet(){ SQLiteDatabase db = this.getReadableDatabase(); // 替换成getReadableDatabase Cursor res=db.rawQuery("select ID from record where Name=?",new String[] {"saqib"}); return res; }
额外注意事项
- 确保数据库表
record里的列名是ID和Name,getColumnIndex()是大小写敏感的,别写错列名; - 如果
Name字段可能对应多条记录,你可以循环遍历Cursor(比如用while(res.moveToNext())),但如果是唯一匹配,moveToFirst()就够了; - 从Android API 19开始,你可以用try-with-resources自动关闭Cursor,写法更简洁:
try (Cursor res = mydatabase.fet()) { if (res != null && res.moveToFirst()) { int targetId = res.getInt(res.getColumnIndex("ID")); i.setText(String.valueOf(targetId)); } else { i.setText("未找到对应ID"); } }
内容的提问来源于stack exchange,提问作者Saqib Ahmad Iqbal
相关产品推荐
相关产品推荐

