Android 异常 -1 column '_id' does not exist

本文详细解析了在Android应用开发中遇到的使用SimpleCursorAdapter时报错column'_id'doesnotexist的原因及解决办法。通过分析问题本质,提出修改数据库字段名和SimpleCursorAdapter参数配置的解决方案,并强调了对Android基础类熟悉的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用SimpleCursorAdapter时,报错 column '_id' does not exist。查了半天,SQL语句没有问题,为什么就报错呢?半天也没有查出来。

查阅了下资料,发现Cursor对象绑定数据时,Cursor必须包含“_id”字段,意味着Cursor对象返回的记录集中必须包含一个叫"_id"的字段,否则将无法完成数据绑定。

尝试了以下做法,将此异常处理:

1.修改数据库字段,将id字段更改为_id字段;

2.创建SimpleCursorAdapter时,使用字段 new [ ]String{"id as _id", ....}

异常虽然解除了,问题的根源还是在于对Android 基础类不熟悉啊,后续需加强对基础的学习!

### 关于 `FUNCTION JSON_EXTRACT does not exist` 错误的解决方案 当遇到 `ERROR 1305 (42000): FUNCTION databaseName.JSON_EXTRACT does not exist` 的错误时,这通常是因为所使用的 MySQL 版本不支持 `JSON_EXTRACT` 函数。该函数是在 MySQL 5.7 及以上版本引入的功能,在较早版本中并不可用[^3]。 为了确认当前数据库服务器的具体版本号,可以执行如下 SQL 查询: ```sql SELECT VERSION(); ``` 如果确实发现正在使用的 MySQL 版本低于 5.7,则有几种可能的方法来解决问题: #### 方法一:升级 MySQL 到更高版本 最直接的方式就是将现有的 MySQL 数据库服务端程序更新到至少 5.7 或者更高的稳定版次。这样可以直接获得对 JSON 类型及其相关操作的支持,包括但不限于 `JSON_EXTRACT()` 函数。 #### 方法二:使用替代方法处理 JSON 字段 对于无法立即升级的情况,可以根据实际需求考虑其他方式实现相同的效果。例如,如果是用来解析存储在 TEXT 或 VARCHAR 中的标准 JSON 文本字符串,那么可以通过编程语言层面先读取数据再做进一步加工;或者是利用正则表达式配合内置字符处理函数完成特定场景下的提取工作。 假设有一个表名为 `users` 并且其中有一列叫做 `info` 存储着 JSON 格式的字符串,想要从中获取键为 "mobile" 对应的值,可以在应用层面上通过 PHP 等脚本来代替原生SQL语句中的 `JSON_EXTRACT(info, '$.mobile')` 部分逻辑。 另外一种思路是尝试改写查询以适应较低版本环境的要求。比如,如果有办法提前知道 JSON 结构固定不变的话,也可以采用 SUBSTRING_INDEX() 和 LOCATE() 组合的方式来模拟简单的路径访问行为,但这显然不如官方提供的 JSON 支持灵活高效。 #### 方法三:检查是否启用了 NoBackslashEscapes 模式 有时候即使安装的是高版本 MySQL,但如果开启了 `NoBackslashEscapes` 模式也可能会导致某些情况下 `JSON_EXTRACT` 不被识别。因此建议查看配置文件 my.cnf/my.ini 是否存在该项设置,并适当调整。 最后提醒一点,任何修改之前都应该做好充分的数据备份准备,以免造成不必要的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值