sql >> データベース >  >> RDS >> SQLite

SQLiteデータベースのリークが見つかりました

    SQLiteOpenHelperを使用しているかどうかわからない 適切に...そのmyDataBaseは必要ありません フィールドでは、データベース接続を管理するという考え方です。そのようにサブクラス化しないでください...onCreate()で何かをしている場合を除きます ここに投稿されていないものなどは、SQLiteOpenHelperを使用できるようです。 直接、つまり:

    SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
        DB_VERSION_NUMBER);
    

    アクティビティを終了するとバックグラウンドタスクも停止するはずだとすると、AsyncTask.cancel(true)を呼び出すことをお勧めします。 Activity.onPause()から 。データベースがonCancelled()からクリーンアップされていることを確認します。

    また、バックグラウンドタスクがデータベースを読み取る唯一のものである場合は、データベースにSQLiteOpenHelperインスタンスを所有させます。静的データで問題が発生するのは簡単なので、私見は避けるのが最善です。私はこのようなことをします:

    protected class BackTask extends AsyncTask<String, Integer, String>
    {
        private SQLiteOpenHelper sqlite;
    
        public void BackTask(Context ctx) {
            sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
                                          DB_VERSION_NUMBER);
        }
        @Override
        protected String doInBackground(String... params) 
        {
             try {
                    //get requeste data from the database
                    //access the web service
                    return result;
    
                  } catch (Exception e) { 
             }
             return null;
        }
    
        @Override
        protected void onCancelled() {
             sqlite.close();
        }
    
        @Override
        protected void onPostExecute(String result)
             sqlite.close();
             // Update UI here
        }
    }
    


    1. SQLiteとデータベースの初期化

    2. ExecuteBatchメソッドは、Javaで値-2の配列を返します

    3. MySQLコピーデータベース

    4. MySQLに行が存在しない場合に挿入する方法(UPSERT)