今天测试提出了一个bug,发布多次消息在查看的时候,位于中间的数据会丢失……排查掉服务器的问题之后,我把注意点放到了sqlite插入语句上面,果然发现了问题。
相应的,他的用法是这样的:
for (Info message : messages) { DatabaseHelper.getInstance(mActivity).insert(message); }问题就在这里,这样就会导致database频繁的开启关闭……这样……中间的事务就会丢失……对应的数据也就插入不进去了
让for循环只循环insert语句,或者拼接一个超长的insert语句……
public void insertList(List<Info> infos) { SQLiteDatabase database = sqlite.getReadableDatabase(); database.beginTransaction(); for (int i = 0; i < infos.size(); i++) { Info info = infos.get(i); ContentValues values = new ContentValues(); values.put("test", info.getTest()); database.insert(LogSqlite.TABLE_NAME, null, values); } try { database.setTransactionSuccessful(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { database.endTransaction(); } database.close(); }当然到时候只需要
DatabaseHelper.getInstance(mActivity).insertList(messages);虽说这个点是常识,不过下回接手别人代码的时候遇到类似问题不会一脸懵逼……记一下
