`
zhonglunshun
  • 浏览: 138661 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQLiteBindOrColumnIndexOutOfRangeException

阅读更多

SQLiteBindOrColumnIndexOutOfRangeException

 

首先贴出错误消息:

 

12-24 18:01:55.940: W/System.err(29565): android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: bind or column index out of range: handle 0x158e0b0
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:385)
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1810)
12-24 18:01:55.940: W/System.err(29565): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1761)
12-24 18:01:55.940: W/System.err(29565): at com.mychat.db.SQLiteTemplate.update(SQLiteTemplate.java:254)
12-24 18:01:55.940: W/System.err(29565): at com.mychat.manager.MessageManager.updateReceived(MessageManager.java:110)
12-24 18:01:55.940: W/System.err(29565): at com.mychat.manager.MyReceiptProvider.createReturnExtension(MyReceiptProvider.java:23)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.provider.EmbeddedExtensionProvider.parseExtension(EmbeddedExtensionProvider.java:105)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.util.PacketParserUtils.parsePacketExtension(PacketParserUtils.java:811)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.util.PacketParserUtils.parseMessage(PacketParserUtils.java:142)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:178)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:46)
12-24 18:01:55.940: W/System.err(29565): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:72)

 

 

 

出现这样的消息一般是由于sql语句中的数据的个数没匹配上。

 

今天弄项目的时候,就遇到了这个问题,花了我一下午才解决,其实解决方法很简单,开始出现这个问题,我上网搜了资料,定位是这条数据库语句少了一些东西,可是我对比来对比去,都不觉得是少了什么。贴下我的代码:

 

SQLiteTemplate st = SQLiteTemplate.getInstance(manager, false);
ContentValues contentValues = new ContentValues();
contentValues.put("msg_received", isReceived);
st.update("im_msg_his", contentValues, "msg_id ",
new String[] { msg_id });

 

 

 

因为以前使用sqlite,都用的是很简单的sql语句,这次因为用的别人的源码,所以对高级一点的语句就不奈何了,我们来看:

SQLiteTemplate是写好的一个模板,而这条update则是调用sqlite系统封装好的:

 

/**
* 更新数据
*
* @param table 表的名称
* @param values contentValues 键值对
* @param whereClause 要更新的哪一行
* @param whereArgs 要替换的那行的数据
* @return 返回值大于0表示更新成功
*/
public int update(String table, ContentValues values, String whereClause,
String[] whereArgs) {
try {
dataBase = dBManager.openDatabase();
int result = dataBase.update(table, values, whereClause, whereArgs);
return result;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!isTransaction) {
closeDatabase(null);
}
}
return 0;
}

 

折腾了一下午,终于发现不同了,没错,就是

 

st.update("im_msg_his", contentValues, "msg_id ",
new String[] { msg_id });

 

 这一句,我们只需要改成

st.update("im_msg_his", contentValues, "msg_id =?",
new String[] { msg_id });

 

 

就搞定了。哦,原来是这样子阿。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics