【问题标题】:Is there any way to lift the restriction on the number of columns to be included in IDataReader?有什么办法可以解除对 IDataReader 中包含的列数的限制?
【发布时间】:2022-01-27 13:38:39
【问题描述】:
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 中包含的列数的限制?

【问题讨论】:

  • 一个表中的一百万个字段。哎哟

标签: android windows sqlite unity3d


【解决方案1】:

Sqlite 是一种“内存数据库”,因此您的 android 设备内存大小可能会限制您可以读取的 db 大小。

根据Limits In SQLite

SQLITE_MAX_COLUMN 的默认设置是 2000。您可以在编译时将其更改为 32767 这样大的值。另一方面,许多经验丰富的数据库设计人员会争辩说,一个规范化的数据库永远不需要超过 100 列一张桌子。

您不应该将大量数据保存在单个表中。

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多