IDbConnection dbConnection = new SqliteConnection(GetDBFilePath())
dbConnection.Open();
IDbCommand dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = "select count(*) from dataTable";
IDataReader dbReader = dbCommand.ExecuteReader();
dbReader.Read();
我正在統一使用 sqlite3。表上有超過 1,000,000 列。我想選擇資料庫。
這就是問題出現的地方。如果要查詢的列數太大,“ExecuteReader”將不會被執行。
SqliteException: Some kind of disk I/O error occurred
disk I/O error
at Mono.Data.Sqlite.SQLite3.Reset (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <00000000000000000000000000000000>:0
at Mono.Data.Sqlite.SQLite3.Step (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <00000000000000000000000000000000>:0
at Mono.Data.Sqlite.SqliteDataReader.NextResult () [0x00000] in <00000000000000000000000000000000>:0
at Mono.Data.Sqlite.SqliteCommand.ExecuteReader (System.Data.CommandBehavior behavior) [0x00000] in <00000000000000000000000000000000>:0
at DBAccess <DatabaseRead>d__24.MoveNext () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) [0x00000] in <00000000000000000000000000000000>:0
<DatabaseRead>d__24:MoveNext()
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
例如,在視窗中,可以執行更多的數字。Android 的運行速度低于 Windows。
有什么辦法可以解除對 IDataReader 中包含的列數的限制嗎?
uj5u.com熱心網友回復:
Sqlite 是一種“記憶體資料庫”,因此您的 android 設備記憶體大小可能會限制您可以讀取的 db 大小。
根據SQLite 中的限制,
SQLITE_MAX_COLUMN 的默認設定是 2000。您可以在編譯時將其更改為大至 32767 的值。另一方面,許多有經驗的資料庫設計人員會爭辯說,規范化良好的資料庫永遠不會需要一個表中超過 100 列的列。
您不應該在單個表中保存大量資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/396803.html
