2012-02-17 139 views
-1

我正在爲我的Android應用程序使用SQLite,經過一些研究後,我想出瞭如何使用UNION語句執行多個插入事務。SQLite多重插入問題

但這是相當低效的。從我在http://www.sqlite.org/speed.html以及許多其他論壇中看到的內容中,我可以使用BEGIN-COMMIT語句加快此過程。但是當我使用它們時,我得到這個錯誤:

Cannot start a transaction within a transaction.

爲什麼?多重插入最有效的方法是什麼?

+0

看看能否幫到你http://stackoverflow.com/a/8027788/1007273 – hovanessyan 2012-02-17 14:29:16

回答

0

您正在使用哪種JDBC驅動程序?是否只有一個內置於Android發行版的內容?

問題很可能與java.sql.Connection#setAutoCommit()。如果連接已經有自動提交已啓用—您可以使用Connection#getAutoCommit() —查看,那麼您的JDBC驅動程序已經發出SQL命令來在您手動嘗試執行操作之前啓動事務,這會使您的手動命令變得冗餘且無效。

如果你正在尋找控制事務的程度,你需要禁用通過調用

connection.setAutoCommit(false); 

再後來自動提交模式爲Connection,您的個人DML語句已經全部發出後,通過Connection#commit()Connection#rollback()提交或回滾活動事務。

我注意到一些JDBC驅動程序很難協調自動提交模式與PreparedStatement的批處理相關的方法。特別是the Xerial JDBC driverthe Zentus driver,它基於它們都與控制自動提交模式的用戶進行對戰並且執行批語句。