加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在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提供的方法完成,则更好的解决方案是避免使用原始查询.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读