SqLite的query方法,参数args中不能含null值

Android 2.3.3 
Eclipse Version: 3.7.0 
LogCat  


LogCat  报错信息:

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


发生错误原因分析:

检查相关代码,发现

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

	public void savePlayCount(String programid, int count) {
	……
	}
而programid最终作为参数args这个数组中的一个值,用于数据库查询 
	Cursor cur = db.query(TBL_NAME, null, where, args, null, null, order);


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

 

解决办法:

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

if (programid != null) {
	……
}


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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Navgate可以使用SQLite作为其数据库管理系统。SQLite是一种轻量级的、基于文件的数据库管理系统,它可以直接嵌入到应用程序,无需单独的服务器进程或配置。 要在Navgate使用SQLite,您需要执行以下步骤: 1. 下载并安装SQLite 您可以从SQLite官方网站(https://www.sqlite.org/download.html)下载适用于您操作系统的SQLite版本,并根据安装向导完成安装过程。 2. 创建数据库 使用SQLite命令行工具或SQLite可视化工具(如SQLite Expert)创建一个新的数据库文件。您可以定义表和列以及其他数据库对象。 3. 连接数据库 在Navgate,您可以使用SQLite JDBC驱动程序连接到SQLite数据库。您需要下载SQLite JDBC驱动程序并将其添加到Navgate的类路径。 4. 编写代码 您可以使用Java编写代码来执行数据库操作。使用SQLite JDBC驱动程序,您可以执行SQL查询和更新操作,并使用Java对象来表示数据库表的行。 以下是一个简单的示例代码,它连接到SQLite数据库并执行一个查询操作: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class SQLiteExample { public static void main(String[] args) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { // Connect to database Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection("jdbc:sqlite:sample.db"); // Execute query statement = connection.createStatement(); resultSet = statement.executeQuery("SELECT * FROM users"); // Process results while (resultSet.next()) { System.out.println("User ID: " + resultSet.getInt("id")); System.out.println("Name: " + resultSet.getString("name")); System.out.println("Email: " + resultSet.getString("email")); } } catch (Exception e) { e.printStackTrace(); } finally { try { // Close resources resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } } } ``` 这段代码连接到名为“sample.db”的SQLite数据库文件,并执行一个查询以检索名为“users”的表的所有行。它使用Java对象来表示每一行,并将其打印到控制台上。最后,它关闭所有打开的资源。 请注意,这只是一个简单的示例,您可以使用SQLite和Navgate来执行更复杂的数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值