`
debuglog
  • 浏览: 195326 次
社区版块
存档分类
最新评论

SQLite的query方法,注意检查参数args中是否含null值

阅读更多
Android 2.3.3   
Eclipse Version: 3.7.0   
LogCat 

 LogCat  报错信息:

03-13 10:25:37.163: ERROR/AndroidRuntime(4166): java.lang.IllegalArgumentException: the bind value at index 2 is null  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:185)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1235)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1189)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1271)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.db.RecordDBHelper.query(RecordDBHelper.java:53)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.manage.RecordDBopt.get(RecordDBopt.java:80)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.Play.savePlayCount(Play.java:775)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.Play$5.run(Play.java:369)  
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at java.util.Timer$TimerImpl.run(Timer.java:284) 

 

发生错误原因分析:

检查相关代码,发现

传入savePlayCount的String值programid为null,在传入之前和传入后均未作判断

public void savePlayCount(String programid, int count) {  
……  
}  

 

而programid最终作为参数args这个String数组中的一个值,用于数据库查询

Cursor cur = db.query(TBL_NAME, null, where, args, null, null, order);  

 

由于args这个String数组中的String有null值,报错

 

解决办法:

在传入programid前或之后对其值作判断

if (programid != null) {  
……  
}

 

PS:args这个String数组中不能有null值

0
0
分享到:
评论

相关推荐

    Android Sqlite使用Deno

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本篇将深入探讨如何在Android应用中使用SQLite,包括数据库的...

    SQLite数据库中插入对象(demo)

    在IT领域,SQLite是一款轻量级的嵌入式数据库,广泛应用于移动设备和单机应用程序中,因为它无需服务器进程,可以方便地进行数据存储。本文将深入探讨如何在SQLite数据库中插入对象,以及如何从数据库中取出这些对象...

    使用CursorLoader异步加载SQLite数据源码

    为了实现这一功能,你需要在ContentProvider的onCreate()方法中注册一个ContentObserver,并在query()方法中设置通知URI。 4. **使用LoaderManager** LoaderManager是负责管理Loader实例的组件,它会根据Activity...

    Android-SQLite代码

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本示例将详细介绍如何在Android应用中使用SQLite进行数据库操作,通过`ex08_1_SQLite`这个...

    android SQLite数据存储

    Cursor cursor = database.query("MyTable", columns, null, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString...

    Android应用开发-SQLite数据库存储.pptx

    在Android应用开发中,SQLite数据库是用于存储应用数据的一个重要组件。SQLite是一个轻量级的、嵌入式的关系型数据库,特别适合于移动设备,因为它不需要独立的服务进程,且占用资源少。以下将详细介绍Android中...

    应用源码之sqlite的一些基本操作,包括数据库创建、数据库版本升级、创建表、数据的增删改查.zip

    在上述例子中,如果将DATABASE_VERSION的值改为2,那么在应用启动时,会执行onUpgrade()方法,对数据库进行相应的更新。 创建表后,我们可以进行数据的增删改查操作。添加数据通常使用SQL的INSERT语句,例如: ```...

    SqliteDatabase应用

    在Android开发中,SQLite数据库是应用内存储数据的常用方式,尤其适合小规模的数据存储。本文将深入探讨如何使用`SqliteDatabase`进行数据库操作,并结合`Menu`来实现查询、新增、修改和删除功能。 首先,`...

    SQLite-Database-Android:创建,升级数据库以及插入,检索,更新,删除数据

    在Android应用开发中,SQLite是一个轻量级的数据库系统,用于存储和管理应用程序的数据。SQLite数据库的优势在于它不需要单独的服务进程,而是直接嵌入到应用程序中,因此在资源有限的移动设备上非常适用。本教程将...

    安卓 数据库操作

    这里我们将深入探讨安卓系统中的SQLite数据库,它是Android内置的关系型数据库,广泛用于移动应用的数据管理。 首先,我们需要了解SQLite的基本概念。SQLite是一个轻量级的数据库引擎,不需要单独的服务器进程,...

    Android数据库操作Demo

    使用`query()`方法可以获取表中的数据。例如,查询所有记录: ```java public List<String> getAllData() { List<String> dataList = new ArrayList(); SQLiteDatabase db = this.getReadableDatabase(); ...

    MSM101_1_4_SQLite

    总的来说,SQLite结合Java JDBC驱动提供了一种简单而有效的在Java应用程序中管理数据的方法。通过学习和掌握这些基本概念,你可以创建功能丰富的数据库驱动的应用程序,无论是小型项目还是大型系统的一部分。记得...

    简单实现自己的Content Provider(一)

    Cursor cursor = resolver.query(uri, null, null, null, null); ``` 6. **使用CursorLoader(可选)**: 如果你想在后台线程中加载数据,可以使用CursorLoader和LoaderManager。在Activity或Fragment中启动Loader,...

    android 日历控件

    Cursor cursor = resolver.query(calendarUri, null, null, null, null); // 查询并处理日历数据 ``` 此外,你可能还需要处理时间区、日期格式等细节问题。在国际化的应用中,确保正确处理日期和时间显示至关重要。...

    Android应用源码获取数据库数据并动态显示在APP

    定义一个ContentProvider需要继承ContentProvider类,并重写其关键方法,如query()、insert()、update()和delete(),以便处理数据的读写操作。同时,需要在AndroidManifest.xml中注册Content Provider。 然后,使用...

    Cursor-Demo:游标迭代方式的演示

    游标(Cursor)是数据库操作中的一个重要概念,特别是在Android开发中,它被广泛用于从SQLite数据库检索数据。在"Cursor-Demo"项目中,我们将会深入理解如何利用游标进行数据迭代,以便有效地处理和展示从...

Global site tag (gtag.js) - Google Analytics