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.
Method to add multiple rows is as below:
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();
}
}
In the below for loop i am trying to add values into sqlite table:
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);
}
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();
}
A better solution is avoiding to use raw query if it can be done by the method provided by SQLiteDatabase
.
this is simpler:
INSERT INTO tb_units (sort, name, isdef) VALUES
(1, "عدد",1),
(2, "کیلوگرم",1),
(3, "گرم",1),
(4, "کیلومتر",1),
(5, "متر",1),
(6, "متراژ",1),
(7, "مگابایت",1),
(8, "کیلوبایت",1),
(9, "مثقال",1),
(10, "شاخه",1),
(11, "صفحه",1),
(12, "رول",1),
(13, "بسته",1),
(14, "کارتن",1),
(15, "دستگاه",1),
(16, "پاکت",1),
(17, "مورد",1),
(18, "جعبه",1),
(19, "تن",1),
(20, "قطعه",1),
(21, "حلقه",1),
(22, "تخته",1),
(23, "جلد",1),
(24, "لیتر",1),
(25, "مترمکعب",1),
(26, "مترمربع",1),
(27, "دست",1),
(28, "جین",1),
(29, "اشتراک",1),
(30, "سری",1),
(31, "گیگابایت",1),
(32, "جلسه",1),
(33, "جفت",1),
(34, "قراض",1),
(35, "ساعت",1),
(36, "تن",1);
and us query with db.execSQL
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With