Как вставить в sqlite в android

Я использую SQLiteOpenHelper для ввода данных. Мне нужно вставить 2500 идентификаторов и 2500 имен, поэтому требуется слишком много времени. Пожалуйста, помогите мне, как уменьшить время вставки. Мы можем вставить несколько записей за раз? Кто-нибудь мне помогает. заранее спасибо. код:

public class DatabaseHandler extends SQLiteOpenHelper { SQLiteDatabase db; private static final int DATABASE_VERSION = 8; private static final String TABLE_CITY = "CITYDETAILS"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.mContext = context; } public void onCreate(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_CITY ); String CREATE_CITY_TABLE = "CREATE TABLE " + TABLE_CITY + "(" + CityId + " INTEGER," + CityName + " TEXT " + ")"; db.execSQL(CREATE_CITY_TABLE); db.execSQL(CREATE_RechargeTypes_TABLE); this.db=db; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older table if existed // Create tables again onCreate(db); } public void add_city(String cityid,String cityname){ SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); ContentValues values = new ContentValues(); values.put(CityId, cityid); values.put(CityName, cityname); db.insert(TABLE_CITY, null, values); db.insertWithOnConflict(TABLE_CITY, null, values, SQLiteDatabase.CONFLICT_IGNORE); db.setTransactionSuccessful(); db.endTransaction(); } } 

Активность:

 try{ String Status = result.get("Status").getAsString(); if (TextUtils.equals(Status, "true")) { Gson gson = new Gson(); JsonArray array = result.get("data") .getAsJsonArray(); Type type = new TypeToken<ArrayList<Cities>>() { }.getType(); setmCities((ArrayList<Cities>) gson.fromJson(array, type)); for(int i=0;i< array.size();i++) { db.add_city(mCities.get(i).getCityid(),mCities.get(i).getCityname()); } } 

Solutions Collecting From Web of "Как вставить в sqlite в android"

Используйте транзакцию для вставки всех строк – НЕ одну строку за транзакцию.

 SQLiteDatabase db = ... db.beginTransaction(); try { // do ALL your inserts here db.setTransactionSuccessful() } finally { db.endTransaction(); } 

РЕДАКТИРОВАТЬ

 public void add_cities(List<Cities> list) { SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); try { ContentValues values = new ContentValues(); for (Cities city : list) { values.put(CityId, city.getCityid()); values.put(CityName, city.getCityName()); db.insert(TABLE_CITY, null, values); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } } 

ВСЕ вставки, одна транзакция.

Спасибо @karakuri. Я передаю список имени города и имени города функции add_city и просматриваю этот список и вставляю все данные. Из этого мы можем вставлять данные в базу данных в течение небольшого промежутка времени.

Класс базы данных:

 public void add_cities(ArrayList<Cities> list) { SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); try { ContentValues values = new ContentValues(); for (Cities city : list) { values.put(CityId, city.getCityid()); values.put(CityName, city.getCityname()); db.insert(TABLE_CITY, null, values); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } } 

Класс данных:

 public class Cities { public String getCityid() { return cityid; } public void setCityid(String cityid) { this.cityid = cityid; } public String getCityname() { return cityname; } public void setCityname(String cityname) { this.cityname = cityname; } @Expose private String cityid="0"; @Expose private String cityname=""; public Cities(){ } } 

Класс активности:

  ArrayList<Cities> mCities; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); db = new DatabaseHandler(getApplicationContext()); executeCircleAndOperatorsList(); } void executeCircleAndOperatorsList() { db.ClearTables(); ServiceClient serviceClient = ServiceUtil.getServiceClient(); JsonParser jsonParser = new JsonParser(); mCitiesCallback = new CancelableCallback(citiescallback); serviceClient.getCities("getCities_v1", mCitiesCallback); } Callback<JsonObject> citiescallback=new Callback<JsonObject>() { @Override public void success(final JsonObject jsonObject, Response response) { Thread t=new Thread(new Runnable() { @Override public void run() { parsecities(jsonObject); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show(); Intent intent=new Intent(SplashActivity.this,LoginAcivtiy.class); startActivity(intent); } }); } }); t.start(); } @Override public void failure(RetrofitError error) { } }; public void parsecities(JsonObject result) { //Log.v("TAG_RESULT", "" +result.toString()); try{ String Status = result.get("Status").getAsString(); if (TextUtils.equals(Status, "true")) { Gson gson = new Gson(); JsonArray array = result.get("data") .getAsJsonArray(); Type type = new TypeToken<ArrayList<Cities>>() { }.getType(); setmCities((ArrayList<Cities>) gson.fromJson(array, type)); long start = System.currentTimeMillis(); db.add_cities(mCities); System.out.println(System.currentTimeMillis() - start); circle_list=db.get_cities(); Log.v("TAG_CIRCLELIST",""+circle_list); } else if (TextUtils.equals("Status", "false")) { // showToast(operators.getMessage()); } else { throw new JSONException("Something went wrong "); } }catch(Exception e){ e.printStackTrace(); } } public void setmCities(ArrayList<Cities> mCities) { this.mCities = mCities; } } 

Поместите свои запросы в строковый массив в файле string.xml, откройте их в коде обработчиком ресурсов и выполните их в цикле. Перед началом цикла используйте методы beginTransaction () и entTransaction () для отката изменений в случае отказа.