2008-12-18 35 views
7

sqlite3 hakkında garip bir sorunla karşılaştım. Open() yöntemini kullanarak aynı veritabanı dosyasının farklı bağlantılarını elde ettim. Bağlantı 1 bir işlem başlatır ve bağlantı 2 bir tablonun birkaç kaydını güncellemek için başka bir işlem başlatır. Sonra bağlantı 1 işlemi gerçekleştirir, ardından 2 numaralı bağlantıyı gerçekleştirir. Ancak, bağlantı 2'nin güncelleştirme komutunun aslında veritabanındaki kaydı güncelleştirmediğini buldum. Bu işlem sırasında atılan bir istisna yoktur. Problemin neden oluştuğunu bilmiyorum. Herkes bana sebebini açıklayabilir mi?Aynı sqlite veritabanının farklı bağlantıları aynı anda işlemlere başlayabilir mi?

cevap

14

SQLite belgelerini okuyorsanız, bunun yalnızca okuma için birden çok bağlantıyı desteklediğini göreceksiniz, veritabanı için çok sayıda bağlantıdan yazamazsınız, çünkü bunun için tasarlanmamıştır. Eğer işlem başlatmayı DERHAL BEGIN kullanmak sürece

http://www.sqlite.org/faq.html#q5

+1

Bununla birlikte, iki eşzamanlı yazma işlemi yapabilirsiniz, bu da soruna neden olan şeydir. –

+0

Bu nedenle, veritabanına yazma işlemi yapan bir işlem varsa, bu işlemler bir işlem dahilinde olsun veya olmasın, diğer yazma işlemleri veritabanını değiştiremez? – user26404

+0

Yazma işlemi yaparken başka bir bağlantı olduğunda (ekleme, güncelleme) aynı anda seçim yapabilir miyim? – user26404

5

, sen geri alma ve bunları yeniden denemek zorunda riski vardır. Bir BEGIN herhangi bir kilitleme yapmaz; sonraki UPDATE veya INSERT kilidi alır ve başarısız olup olmadığını görmek için sonuç kodunu kontrol etmeniz gerekir. Bu sayfaya transactions numaralı telefondan ve locks numaralı telefondan ulaşabilirsiniz.

İlgili konular