热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite异常:Android中没有这样的列

如何解决《SQLite异常:Android中没有这样的列》经验,为你挑选了1个好方法。

我写了一个应用程序来更新SQlite Db中的行,下面是数据处理程序中更新的代码:

public long updatedata(String ID, String NAME,String NUMBER)
    {
        ContentValues cOntent= new ContentValues();
        content.put(name, NAME);
        content.put(number,NUMBER);
        return db.update(table_name, content, "id "+"="+ID, null);

    }

现在当我需要更新我在下面的代码中使用的行时:

Datahandler data =new Datahandler();
data.open();
long updateresult = data.updatedata(oldID, cloudnames.get(pos), cloudnumbers.get(pos));
data.close();

还假设上面提供的值是存在且有效的,并且我确信我的数据库中存在id = jo_2,问题是当我运行代码时,异常如下所示:

02-19 23:59:34.200: E/SQLiteLog(18485): (1) no such column: jo_2
02-19 23:59:34.205: W/dalvikvm(18485): threadid=11: thread exiting with uncaught exception (group=0x41b30c08)
02-19 23:59:34.210: E/AndroidRuntime(18485): FATAL EXCEPTION: IntentService[test-service]
02-19 23:59:34.210: E/AndroidRuntime(18485): Process: com.kaizendroid.bc, PID: 18485
02-19 23:59:34.210: E/AndroidRuntime(18485): android.database.sqlite.SQLiteException: no such column: jo_2 (code 1): , while compiling: UPDATE info SET name=?,number=? WHERE id =jo_2
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1706)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1654)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at com.kaizendroid.bc.DataHandler.updatedata(DataHandler.java:122)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at com.kaizendroid.bc.MyTestService.getbcfromcloud(MyTestService.java:169)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at com.kaizendroid.bc.MyTestService.get_local_cloud_compare(MyTestService.java:70)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at com.kaizendroid.bc.MyTestService.onHandleIntent(MyTestService.java:49)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.os.Looper.loop(Looper.java:146)
02-19 23:59:34.210: E/AndroidRuntime(18485):    at android.os.HandlerThread.run(HandlerThread.java:61)

Cᴏʀʏ.. 8

该错误并不是说表中缺少"jo_2"值,而是缺少名为的jo_2.听起来你某处有一些格式错误的SQL.

如果这是您的实际SQL(来自错误):

UPDATE info SET name=?,number=? WHERE id =jo_2

然后你需要一些部分引用jo_2:

UPDATE info SET name=?,number=? WHERE id = 'jo_2'

没有它们,SQLite正在将列id 进行比较,该jo_2不存在.

要解决此问题,您可以在代码中更改此行:

return db.update(table_name, content, "id = '" + ID + "'", null);
                        // add quotes here  ^      and ^

编辑:Falmarri的答案显示了一种更安全的方法来修复您的代码以避免错误.



1> Cᴏʀʏ..:

该错误并不是说表中缺少"jo_2"值,而是缺少名为的jo_2.听起来你某处有一些格式错误的SQL.

如果这是您的实际SQL(来自错误):

UPDATE info SET name=?,number=? WHERE id =jo_2

然后你需要一些部分引用jo_2:

UPDATE info SET name=?,number=? WHERE id = 'jo_2'

没有它们,SQLite正在将列id 进行比较,该jo_2不存在.

要解决此问题,您可以在代码中更改此行:

return db.update(table_name, content, "id = '" + ID + "'", null);
                        // add quotes here  ^      and ^

编辑:Falmarri的答案显示了一种更安全的方法来修复您的代码以避免错误.


推荐阅读
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
author-avatar
干杯13ds_198
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有