Нужно вставить объемные данные в SQLite (100-500 записей одновременно... по 7 столбцов, в каждой строке будет 7 значений)
Использование statment.bind Plz предлагает, если что-то не так, и hw реализовать с помощью пакетной вставки db.execSQL.
SQLiteDatabase db = DBHelper.getWritableDatabase();
String str = "INSERT INTO DBAdapter.KEY_BD1_DB_NAME(a, b, c, d, e, f,g) VALUES(?, ?, ?, ?, ?, ?,?)";
SQLiteStatement statement = db.compileStatement(str);
db.beginTransactionNonExclusive();
try {
for (int i=0;i<arraylist.length;i++)
{
statement.bindLong(1, id);
statement.bindLong(2, alist[i]);
statement.bindLong(3, blist[i]);
statement.bindString(4, strTStamp[0]);
statement.bindString(5, strTStamp[1]);
statement.bindLong(6, j);
statement.bindLong(7, tstamp);
if (alist.size>100)
{
if(count==100)
{
statement.executeInsert();
statement.clearBindings();
count=0;
}
else
{
count++;
}
}
}
statement.executeInsert();
statement.clearBindings();
db.setTransactionSuccessful();
Log.d("INSERT","Done");
return true;
} catch (SQLException ex) {
Log.w("SqlErr", "At kkr : " + ex.toString());
return false;
}finally {
db.endTransaction();
db.close();
}
Вы можете вставить только одну строку за раз. Итак, вычеркнув странные вещи из вашего кода и включив бит, который я упомянул в комментарии об однократном связывании только константных значений (Отказ от ответственности: это будет работать в C; не на 100% уверен в привязках java/android), стандартный подход к вставить кучу данных должно выглядеть примерно так:
SQLiteDatabase db = DBHelper.getWritableDatabase();
db.beginTransaction();
try {
String str = "INSERT INTO DBAdapter.KEY_BD1_DB_NAME(a, b, c, d, e, f,g) VALUES(?, ?, ?, ?, ?, ?,?)";
SQLiteStatement statement = db.compileStatement(str);
statement.bindLong(1, id);
statement.bindString(4, strTStamp[0]);
statement.bindString(5, strTStamp[1]);
statement.bindLong(6, j);
statement.bindLong(7, tstamp);
for (int i=0;i<arraylist.length;i++) {
statement.bindLong(2, alist[i]);
statement.bindLong(3, blist[i]);
statement.executeInsert();
}
db.setTransactionSuccessful();
Log.d("INSERT","Done");
return true;
} catch (SQLException ex) {
Log.w("SqlErr", "At kkr : " + ex.toString());
return false;
} finally {
db.endTransaction();
db.close();
}
Другие вещи:
Похоже, вы пытаетесь заполнить базу данных при первом использовании. Но вместо этого было бы гораздо лучше, быстрее и проще просто поставить ваше приложение с готовым к использованию файлом базы данных в ресурсах вашего приложения assets/
а затем, при первом использовании, просто использовать вместо этого эту БД для "заполнения". Есть несколько вспомогательных библиотек, которые помогают с этим: https://github.com/jgilfelt/android-sqlite-asset-helper