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

调用Cursor.getColumnIndex方法报错Value must be ≥ 0问题求助

报错原因分析
  • 核心触发点是queryCursor.getString(queryCursor.getColumnIndex("products"))这行代码:Android系统的Cursor.getColumnIndex()方法在找不到指定列名时会返回-1,而getString()方法要求传入的列索引参数必须≥0,传入负数就会抛出你遇到的Value must be ≥ 0异常。
  • 列查找失败的常见原因包括:
    • 你的TABLENAME对应的数据表中,根本不存在名为products的字段
    • 列名大小写不匹配:SQLite列名大小写敏感(具体取决于建表时的配置),如果实际字段是Products/PRODUCTS,写小写products就会匹配失败
  • 代码额外问题:你当前是只读查询逻辑,全程没有调用beginTransaction()开启事务,多余的ProductDatabase.setTransactionSuccessful()调用也可能引发额外的运行时异常。
修复建议
  • 先核对建表语句的字段定义,确认列名的拼写、大小写完全匹配
  • 推荐改用getColumnIndexOrThrow()代替getColumnIndex(),列不存在时会直接抛出明确的「列未找到」异常,排查更直观
  • 增加索引合法性校验,示例修改如下:
int productColumnIndex = queryCursor.getColumnIndex("products");
if (productColumnIndex >= 0) {
    String product = queryCursor.getString(productColumnIndex);
    productList.add(product);
}
  • 删除无用的ProductDatabase.setTransactionSuccessful()代码行。

内容的提问来源于stack exchange,提问作者Quentin Ramecourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:03