Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何提高SQLite性能?_Android_Performance_Sqlite - Fatal编程技术网

Android 如何提高SQLite性能?

Android 如何提高SQLite性能?,android,performance,sqlite,Android,Performance,Sqlite,我想在androidsqlite中插入3000多条记录,但是下面的代码需要花费很多时间来插入数据 这是我的密码 public boolean addSale(Sale objSale) { ContentValues values = new ContentValues(); values.put(SALE_BRANCH, objSale.getBranch()); values.put(SALE_SUPPLIER, objSale.getSupplier());

我想在androidsqlite中插入3000多条记录,但是下面的代码需要花费很多时间来插入数据 这是我的密码

public boolean addSale(Sale objSale) {
    ContentValues values = new ContentValues();
    values.put(SALE_BRANCH, objSale.getBranch());
    values.put(SALE_SUPPLIER, objSale.getSupplier());
    values.put(SALE_BUYER, objSale.getBuyer());
    values.put(SALE_CAT1, objSale.getCat1());
    values.put(SALE_CAT2, objSale.getCat2());
    values.put(SALE_CAT3, objSale.getCat3());
    values.put(SALE_CAT4, objSale.getCat4());
    values.put(SALE_CAT5, objSale.getCat5());
    values.put(SALE_CAT6, objSale.getCat6());
    values.put(SALE_DESIGNO, objSale.getDesigNo());
    values.put(SALE_ITEMSIZE, objSale.getItemSize());
    values.put(SALE_SALEQTY, objSale.getSaleQty());
    values.put(SALE_STOCKQTY, objSale.getStockQty());
    values.put(SALE_FinalProduct, objSale.getFinalProduct());
    values.put(SALE_PriceRange, objSale.getPriceRange());
    values.put(SALE_CoreNonCore, objSale.getCoreNonCore());
    values.put(SALE_Color, objSale.getColor());
    values.put(SALE_GSLCode, objSale.getGSLCode());
    values.put(SALE_Wanted, objSale.getWanted());
    values.put(SALE_Pqty, objSale.getPqty());
    values.put(SALE_MRP, objSale.getMRP());
    values.put(SALE_PRate, objSale.getPRate());
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.insert(TABLE_SALE, null, values);
    db.close();
    return true;
}
这是我的任务。我从webservice获取数据并插入SQLite

protected void onPostExecute(String result) 
        {
            try {

                String l = result.replace("\\", "");
                l = l.replace("''", "");
                String sdsd = l.substring(1, l.length() - 1);
                JSONArray jsonArray = new JSONArray(sdsd);
                Log.i("JSON", "Number of surveys in feed: " +jsonArray.length());
                /*if(db.delSaleData()){

                }*/
                    for (int i = 0; i < jsonArray.length(); i++) 
                    {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);

                            sl.setBranch(jsonObject.getString("Branch"));
                            sl.setSupplier(jsonObject.getString("Supplier"));
                            sl.setBuyer(jsonObject.getString("Buyer"));
                            sl.setCat1(jsonObject.getString("Cat1"));
                            sl.setCat2(jsonObject.getString("Cat2"));
                            sl.setCat3(jsonObject.getString("Cat3"));
                            sl.setCat4(jsonObject.getString("Cat4"));
                            sl.setCat5(jsonObject.getString("Cat5"));
                            sl.setCat6(jsonObject.getString("Cat6"));
                            sl.setDesigNo(jsonObject.getString("DesigNo"));
                            sl.setItemSize(jsonObject.getString("ItemSize"));
                            sl.setSaleQty(jsonObject.getString("SaleQty"));
                            sl.setStockQty(jsonObject.getString("StockQty"));
                            sl.setFinalProduct(jsonObject.getString("FinalProduct"));
                            sl.setPriceRange(jsonObject.getString("PriceRange"));
                            sl.setCoreNonCore(jsonObject.getString("CoreNonCore"));
                            sl.setColor(jsonObject.getString("Color"));
                            sl.setGSLCode(jsonObject.getString("GSLCode"));
                            sl.setWanted(jsonObject.getString("Wanted"));
                            sl.setPqty(jsonObject.getString("Pqty"));
                            sl.setMRP(jsonObject.getString("MRP"));
                            sl.setPRate(jsonObject.getString("PRate"));

                            if(db.addSale(sl))
                            {
                                //Toast.makeText(getApplicationContext(), " Insert.." , Toast.LENGTH_SHORT).show(); 
                            }
                    }

                    setData();


                } catch (Exception e) {
                    e.printStackTrace();
            }
            dialog.dismiss();
            setTableData("All");


        }
受保护的void onPostExecute(字符串结果)
{
试一试{
字符串l=结果。替换(“\\”,“”);
l=l。替换(“”,“”);
字符串sdsd=l.substring(1,l.length()-1);
JSONArray JSONArray=新JSONArray(sdsd);
Log.i(“JSON”,“提要中的调查数量:”+jsonArray.length());
/*if(db.delSaleData()){
}*/
for(int i=0;i
使用
Async
类。在后台执行操作,而不是在主UI线程中

更新


在代码中,您可以通过
onPost
而不是
onBackground
插入SQLite
onPost
在UI线程上执行操作,而
onBackground
在单独的(后台)线程上执行操作,这样就不会影响UI。因此,将操作代码移动到
onBackground
不要每次插入时都打开和关闭数据库。打开它一次,然后在退出应用程序时关闭它。

使用SQLITE语句,例如:

private void bulkInsertRecords(String[] records) {
          String sql = "INSERT INTO "+ SAMPLE_TABLE_NAME +" VALUES (?,?,?);";
          SQLiteStatement statement = sampleDB.compileStatement(sql); //Este é o prepare
          sampleDB.beginTransaction();
          for (int i = 0; i<records.length; i++) {
                    statement.clearBindings();
                    statement.bindString(1, records[0]);
                    statement.bindString(2, records[1]);
                    statement.bindString(3, records[2]);
                    statement.execute();
           }
           sampleDB.setTransactionSuccessful(); 
           sampleDB.endTransaction();
} 
private void bulkInsertRecords(字符串[]记录){
字符串sql=“插入到“+样本表名称+”值(?,?);”;
SQLiteStatement语句=sampleDB.compileStatement(sql);//Esteéo prepare
sampleDB.beginTransaction();

对于(int i=0;我是如何提高SQLite性能的?是的。。所有的插入都是在Asynk任务中执行的。@user3249477是的,它使UI线程像往常一样运行,这样用户就不会注意到您正在插入DB。记住,我们在这里谈论的是数千行。@user1690714也请发布异步代码,也许我们可以在那里找到一些东西。@BlazeTama您没有“没有回答我的问题。只是说用户不会注意到,这并不意味着SQLite的性能有所提高。请检查此项..您仅在应用程序首次启动时执行此项操作一次吗?此项是否有任何错误..如果没有,那么为什么投反对票?+1,您也应该检查此项。这是否会加快速度?真的…它会加快数据插入速度..是的,但是”t阅读此链接以获取更多信息是的,它确实使其更快。每个事务都是一个打开和关闭的文件。为每个插入执行此操作的成本非常高。