我的應用程序數據庫需要填充大量數據,所以在onCreate()
期間,這不僅僅是一些創建表sql 的說明,還有很多插入。我選擇的解決方案是 將所有這些指令存儲在位於res/raw的sql文件中,並且其中 加載了Resources.openRawResource(id)
。創建android應用程序數據庫數據量大
它運行良好,但我面對的編碼問題,我有一些強調 字符在SQL文件中出現在我的應用程序不好。這 我的代碼來做到這一點:
public String getFileContent(Resources resources, int rawId) throws
IOException
{
InputStream is = resources.openRawResource(rawId);
int size = is.available();
// Read the entire asset into a local byte buffer.
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
// Convert the buffer into a string.
return new String(buffer);
}
public void onCreate(SQLiteDatabase db) {
try {
// get file content
String sqlCode = getFileContent(mCtx.getResources(), R.raw.db_create);
// execute code
for (String sqlStatements : sqlCode.split(";"))
{
db.execSQL(sqlStatements);
}
Log.v("Creating database done.");
} catch (IOException e) {
// Should never happen!
Log.e("Error reading sql file " + e.getMessage(), e);
throw new RuntimeException(e);
} catch (SQLException e) {
Log.e("Error executing sql code " + e.getMessage(), e);
throw new RuntimeException(e);
}
我發現避免這個問題的解決方案是從一個巨大的static final String
而不是文件加載SQL指令 ,所有 強調字符顯示良好。
但是,是不是有一個更優雅的方式來加載SQL指令比所有SQL指令的大 static final String
屬性?
非常感謝Dave – tbruyelle 2009-12-23 16:56:04