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

Cách chèn một lượng lớn dữ liệu vào cơ sở dữ liệu sqlite trong Android

Như bạn đã đề xuất, số lượng hàng rất lớn, tôi khuyên bạn không nên sử dụng AsyncTask , vì nó không gắn liền với vòng đời Hoạt động của bạn, tức là nếu hoạt động của bạn bắt đầu nó chết, điều đó không có nghĩa là AsyncTask cũng chết, vì vậy nếu bạn thử khởi tạo AsyncTask và bằng cách nào đó nếu hoạt động của bạn bị chết, ví dụ như xoay màn hình hoặc nhấn phím quay lại khi khởi động lại một AsyncTask khác sẽ được tạo ra thay vì sau đó nó được liên kết với AsyncTask đã thực thi . do đó sao chép các hoạt động giống nhau.

Vì vậy, trên tất cả, tôi khuyên bạn nên làm theo cách tiếp cận

(A)

  1. Tạo một IntentService , đó là handleIntent() api đã thực thi trong một chuỗi worker nên bạn không phải lo lắng về bất kỳ điều gì và sau khi tất cả các lỗi trong hàng đợi của nó kết thúc, nó sẽ tự động chết, vì vậy bạn không cần lo lắng về việc rò rỉ bất kỳ tài nguyên nào.

  2. viết logic của bạn để chèn hàng loạt hàng loạt, sử dụng api của trình giải quyết nội dung BulInsert () cho tương tự. Tôi sẽ khuyên bạn nên chèn 100 roes mỗi đợt, bạn có thể thực hiện kiểm tra lỗi và khôi phục để đảm bảo việc chèn diễn ra bình thường.

  3. Sau khi tất cả quá trình chèn hoàn tất, bạn có thể đăng lại giao diện người dùng của mình bằng Trình xử lý và Người đưa tin.

với tất cả những điều này, bạn sẽ đạt được hai thách thức lớn

  1. Không làm treo giao diện người dùng của bạn, thoát khỏi mọi ANR có thể có
  2. Ngay cả khi phím quay lại được nhấn, hãy đảm bảo rằng hoạt động db diễn ra suôn sẻ như khi nó được thực hiện trong tác vụ nền.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android SQLite đã đóng ngoại lệ

  2. Android - Con trỏ trênMapReady (Điểm đánh dấu)

  3. SQLite CASE

  4. Lưu trữ cấu hình trong android

  5. Tôi có nên tạo một lớp kế thừa SQLiteOpenHelper cho mỗi bảng trong cơ sở dữ liệu của mình không?