Trong ứng dụng Android của tôi, tôi phải chèn dữ liệu vào một số bảng SQLite từ các luồng khác nhau (một chuỗi để chèn vào một bảng và có 5 bảng). Có rất nhiều dữ liệu vì vậy tôi sử dụng beginTransaction()
->setTransactionSuccessful()
->endTransaction();
trong mỗi chủ đề và tất cả các chủ đề bắt đầu cùng một lúc, nhưng trong chủ đề thứ hai hoặc đôi khi ba tôi luôn luôn có ngoại lệ này:Không thể thực hiện thao tác vì không có giao dịch hiện tại khi chèn vào cơ sở dữ liệu
tôi sử dụng kết nối SQLite đơn (singleton) như là mentioned here nhưng vấn đề này vẫn còn. Vì vậy, tôi hy vọng cho một số help.Thanks trước!
P.S Và nếu tôi có điều kiện chủng tộc, tôi nên sử dụng cách nào khác để chèn đa luồng?
Tôi đã thêm một số ý tưởng vào câu trả lời của mình @AlexanderKaraberov. – Gray
Có một lớp (chỉ là một DAO) mà thay đổi cơ sở dữ liệu thực tế. Sau đó, chủ đề của bạn sẽ chỉ gọi là 'insert()' hoặc một số như vậy. Phương thức sẽ được 'đồng bộ hóa' và nó sẽ quyết định liệu tôi có cần bắt đầu giao dịch nếu nó chưa được bắt đầu hay kết thúc một giao dịch nếu nó đã được bắt đầu. – Gray