【问题标题】:Sqlite db created by Java and c# are having different sizesJava 和 c# 创建的 Sqlite db 大小不同
【发布时间】:2014-08-02 15:14:28
【问题描述】:

我正在创建一个 sqlite DB,它需要与 c# 中的服务器创建的 sqlite DB 完全相同(表、数据、大小)。

我创建了具有相同架构和数据的数据库,但由于某种原因,数据库的大小不匹配。我搜索了很多,但找不到任何解决方案或原因。

任何评论、想法或解决方案都可以。

我们在 .net 服务器中使用 SQLiteOpenHelper for java 和 SQLiteCommand。

【问题讨论】:

  • 你试过转储每个文件,看看有什么区别吗? stackoverflow.com/questions/2093263/…你用什么代码来创建架构等?
  • 你设置页面大小了吗?
  • 嗨 @tim 是的,我看到了文件,Java 中有很多 0。
  • 嗨@CL 不,我们没有设置任何页面大小。

标签: java c# android sqlite


【解决方案1】:

SQLite 将大多数主要数据结构对齐到页面上,因此数据库页面大小对文件大小有很大影响。

SQLite 尝试将默认页面大小与磁盘扇区大小对齐,但这在不同操作系统上的工作方式不同。

如果希望页面大小一致,请在创建数据库时使用PRAGMA page_size进行设置。

【讨论】:

  • 是的,这似乎是问题所在,在 java 中我得到的页面大小为 4096,而在 c# 中为 1024。db 文件大小在 java 中也大约是 4 倍。所以我正在尝试使用 db.rawQuery("PRAGMA page_size=1024",null); 设置页面大小但它似乎不起作用。我也试过 SQLiteOpenHelper 提供的 setPageSize 方法。你知道为什么吗?我在 onCreate、onConfigure、onOpen 中添加了这些行,但它不起作用。
  • 您应该在SQLiteOpenHelper 开始其事务之前设置它。使用 SQLiteAssetHelper 之类的东西来复制已经具有正确页面大小的数据库文件。
  • 我没有任何大小合适的数据库。在SQLiteOpenHelper 对象中,除了创建数据库之外,我没有做任何事务(需要这样做,因为这是我将如何让数据库设置页面大小)
  • SQLiteOpenHelper 自己创建一个事务来运行回调。
猜你喜欢
  • 2011-06-09
  • 2023-03-24
  • 2011-07-03
  • 1970-01-01
  • 2015-02-05
  • 2017-01-28
  • 2011-01-09
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多