You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

额外注意事项

  1. 确保数据库表record里的列名是ID和Name,getColumnIndex()是大小写敏感的,别写错列名;
  2. 如果Name字段可能对应多条记录,你可以循环遍历Cursor(比如用while(res.moveToNext())),但如果是唯一匹配,moveToFirst()就够了;
  3. 从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:00