如何在sqlite android中插入多行
发布时间:2020-12-12 18:56:00 所属栏目:百科 来源:网络整理
导读:我有一个方法在类中的sqlite中插入值.在主要活动中,我正在解析json值并尝试在循环中将值插入sqlite,因为我必须插入多行.但是只有一行被添加到数据库中. 添加多行的方法如下: public void addSession(String sessionname,String start_time,String end_time,
我有一个方法在类中的sqlite中插入值.在主要活动中,我正在解析json值并尝试在循环中将值插入sqlite,因为我必须插入多行.但是只有一行被添加到数据库中.
添加多行的方法如下: public void addSession(String sessionname,String start_time,String end_time,String id) { SQLiteDatabase db = this.getWritableDatabase(); try { db.beginTransaction(); String sql = "Insert into session (id,sessionname,start_time,end_time) values(?,?,?)"; SQLiteStatement insert = db.compileStatement(sql); insert.bindString(1,id); insert.bindString(2,sessionname); insert.bindString(3,start_time); insert.bindString(4,end_time); insert.execute(); db.setTransactionSuccessful(); } catch (Exception e) { Log.w("Appet8:",e ); } finally { db.endTransaction(); } } 在下面的for循环中我试图将值添加到sqlite表中: JSONObject jsonObject = new JSONObject(response); JSONArray foodsessions = jsonObject.getJSONArray("foodsessions"); for(int i=0;i<foodsessions.length();i++) { JSONObject session_object = foodsessions.getJSONObject(i); String session = session_object.getString("sessionname"); String start_time = session_object.getString("start_time"); String end_time = session_object.getString("end_time"); String session_id = session_object.getString("id"); db.addSession(session,end_time,session_id); } 解决方法一个更好的结构是在方法之外创建一个db引用,并将其作为引用传递:SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); // your for loop db.setTransactionSuccessful(); db.endTransaction(); ============== // adb is SQLiteOpenHelper JSONObject jsonObject = new JSONObject(response); JSONArray foodsessions = jsonObject.getJSONArray("foodsessions"); int length = foodsessions.length(); for (int i = 0; i < length; i++) { JSONObject o = foodsessions.getJSONObject(i); String session = session_object.getString("sessionname"); String start_time = session_object.getString("start_time"); String end_time = session_object.getString("end_time"); String session_id = session_object.getString("id"); SQLiteDatabase db = adb.getWritableDatabase(); ContentValues newValues = new ContentValues(); newValues.put(adb.ATTRIBUTE_session,session); newValues.put(adb.ATTRIBUTE_start_time,start_time); newValues.put(adb.ATTRIBUTE_end_time,end_time); newValues.put(adb.ATTRIBUTE_session_id,session_id); long res = db.insertWithOnConflict(adb.TABLE_NAME,null,newValues,SQLiteDatabase.CONFLICT_REPLACE); db.close(); } 如果可以通过SQLiteDatabase提供的方法完成,则更好的解决方案是避免使用原始查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgreSQL |安装(Ubuntu、macos)、配置
- 了解Swift 2.2选择器语法 – #selector()
- xml – Android Studio图形界面中的ViewFlipper切换?
- ES6实现图片切换特效(图片墙效果)
- c# – 实体框架6没有导航属性的一对多关系
- ruby-on-rails – 使用Rails和Devise,如果我使用ActiveReco
- 在Ajax中使用对象调用PHP文件
- XNA: Overview of the Content Pipeline
- (译)如何优化cocos2d程序的内存使用和程序大小:第一部分
- c – 为什么写入缓冲区的速度比写入缓冲区的速度快42?