5

我正在解决一个问题,我需要将一个 sqlite 数据库附加到另一个数据库。其中一个数据库是由我的应用程序创建的,另一个是从远程服务器下载的。我更喜欢以合法的数据格式(如 JSON)获取它,但我无法控制这方面。

问题是下载的sqlite文件的编码是UTF-16le。本地文件是 UTF-8(Android 的默认)。我可以自己读取这两个文件,但 SQLite 仅在编码匹配时才允许 ATTACH 操作。

解决方案应该像在我创建本地数据库时使用 UTF-16le 编码一样简单,但似乎总是在我获取数据库对象之前设置编码并且我无法更改它。我正在使用 SQLiteOpenHelper 并且我假设所有 PRAGMA 语句都应该发生在 onConfigure() 中,如下所示:

@Override 
public void onConfigure(SQLiteDatabase db) { 
    db.execSQL("PRAGMA encoding = \"UTF-16le\""); 
}

当我在此之后检查编码时,它始终是 UTF-8。

Log.d(TAG, DatabaseUtils.dumpCursorToString(db.rawQuery("PRAGMA encoding", null)));

结果:

04-12 11:10:07.116: D/MainActivity(10743): >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@b3636fd0
04-12 11:10:07.116: D/MainActivity(10743): 0 {
04-12 11:10:07.116: D/MainActivity(10743):    encoding=UTF-8
04-12 11:10:07.116: D/MainActivity(10743): }
04-12 11:10:07.116: D/MainActivity(10743): <<<<<

我什至尝试在内存中创建一个数据库并设置它的编码,但它总是在之后报告 UTF-8:

SQLiteDatabase db = SQLiteDatabase.create(null);
db.execSQL("PRAGMA encoding = \"UTF-16le\"");

我有点困惑,因为我可以打开这些 UTF-16le 编码的数据库并且它们的编码被正确报告,但我似乎无法在设备上创建一个。有没有办法在我创建数据库时设置它的编码?

4

2 回答 2

1

根据thisthis Android sqlite仅支持UTF-8和UTF-16。

这有帮助吗?亚龙

于 2013-04-14T12:33:30.603 回答
0

想出了一个笨拙的解决方案。基本上,我的资产文件夹中有一个空白的 UTF-16le 数据库文件。当我创建一个新数据库时,我将这个文件复制过来(在我的 SQLiteOpenHelper 中),然后正常执行所有操作。

于 2013-04-23T22:28:55.323 回答