如何在sqlite android中插入多行 [英] how to insert multiple rows into sqlite android
问题描述
我有一个方法可以在类的sqlite
中插入值.在主要活动中,我正在解析json值,并试图将值插入到循环中的sqlite
中,因为我必须插入多个行.但是只有一行被添加到数据库中.
I have a method to insert values into sqlite
in a class. And in the main activity i am parsing json values and trying to insert the values into sqlite
in a loop as i have got to insert more than one row. But only one row is getting added into database.
添加多行的方法如下:
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,start_time,end_time,session_id);
}
推荐答案
更好的结构是在方法外部创建db引用,并将其作为引用传递:
A better structure would be create a db reference outside the method, and pass it as a reference:
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
// your for loop
db.setTransactionSuccessful();
db.endTransaction();
=============== 请检查下面用于插入多行的内容:
============== Please check below which is used for insert multi rows:
// 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
提供的方法完成原始查询,则是一种更好的解决方案.
A better solution is avoiding to use raw query if it can be done by the method provided by SQLiteDatabase
.
这篇关于如何在sqlite android中插入多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!