我正在爲我的Android應用程序使用SQLite,經過一些研究後,我想出瞭如何使用UNION語句執行多個插入事務。SQLite多重插入問題
但這是相當低效的。從我在http://www.sqlite.org/speed.html以及許多其他論壇中看到的內容中,我可以使用BEGIN-COMMIT語句加快此過程。但是當我使用它們時,我得到這個錯誤:
Cannot start a transaction within a transaction.
爲什麼?多重插入最有效的方法是什麼?
我正在爲我的Android應用程序使用SQLite,經過一些研究後,我想出瞭如何使用UNION語句執行多個插入事務。SQLite多重插入問題
但這是相當低效的。從我在http://www.sqlite.org/speed.html以及許多其他論壇中看到的內容中,我可以使用BEGIN-COMMIT語句加快此過程。但是當我使用它們時,我得到這個錯誤:
Cannot start a transaction within a transaction.
爲什麼?多重插入最有效的方法是什麼?
您正在使用哪種JDBC驅動程序?是否只有一個內置於Android發行版的內容?
問題很可能與java.sql.Connection#setAutoCommit()
。如果連接已經有自動提交已啓用—您可以使用Connection#getAutoCommit()
—查看,那麼您的JDBC驅動程序已經發出SQL命令來在您手動嘗試執行操作之前啓動事務,這會使您的手動命令變得冗餘且無效。
如果你正在尋找控制事務的程度,你需要禁用通過調用
connection.setAutoCommit(false);
再後來自動提交模式爲Connection
,您的個人DML語句已經全部發出後,通過Connection#commit()
或Connection#rollback()
提交或回滾活動事務。
我注意到一些JDBC驅動程序很難協調自動提交模式與PreparedStatement
的批處理相關的方法。特別是the Xerial JDBC driver和the Zentus driver,它基於它們都與控制自動提交模式的用戶進行對戰並且執行批語句。
看看能否幫到你http://stackoverflow.com/a/8027788/1007273 – hovanessyan 2012-02-17 14:29:16