SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Đã tìm thấy rò rỉ cơ sở dữ liệu SQLite

Không chắc bạn đang sử dụng SQLiteOpenHelper đúng cách ... bạn không cần myDataBase đó , ý tưởng là nó quản lý kết nối cơ sở dữ liệu của bạn cho bạn. Đừng phân lớp theo cách đó ... trừ khi bạn đang làm những việc trong onCreate() vv không được đăng ở đây, có vẻ như bạn chỉ có thể sử dụng SQLiteOpenHelper trực tiếp, tức là:

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

Giả sử rằng việc kết thúc hoạt động cũng sẽ dừng tác vụ nền của bạn, tôi khuyên bạn nên gọi AsyncTask.cancel(true) từ Activity.onPause() của bạn . Đảm bảo cơ sở dữ liệu được dọn sạch khỏi onCancell ().

Và nếu tác vụ nền của bạn là thứ duy nhất đọc cơ sở dữ liệu thì hãy làm cho nó sở hữu phiên bản SQLiteOpenHelper. Rất dễ gặp rắc rối với dữ liệu tĩnh, vì vậy tốt nhất bạn nên tránh IMHO. Tôi muốn làm một cái gì đó như thế này:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các toán tử để trích xuất các thành phần con JSON

  2. Chèn hoặc cập nhật SQLite cho Android

  3. Tạo câu lệnh INSERT từ kết quả truy vấn SQLite

  4. Tại sao tôi nhận được java.lang.IllegalArgumentException:giá trị ràng buộc tại chỉ mục 1 là null trong trường hợp này?

  5. Cách tự động truy vấn lại với LoaderManager