我在使用 sqlite 和 Android 2.3.7 时遇到了严重的性能问题。
我要存储少量数据:14 行,每行 8 列。从网页读取数据;解析数据时,我将删除数据库的全部内容,然后一次性批量插入新数据。
一些(已编辑)LogCat 输出:
03-15 14:39:51.909: Got content downloaded.
03-15 14:39:52.299: Deleting existing info from db.
03-15 14:39:52.719: Bulk inserting new data into db.
03-15 14:40:00.709: Stored data in the database.
我正在使用 ContentProvider 来访问数据库。
解析页面需要 0.4 秒。
删除需要 0.4 秒。
bulkInsert 需要 8 秒。
对所有数据的后续查询和读取再次需要大约 0.4 秒。
相关代码片段:
Log.v(TAG, "Deleting existing info from db.");
delete(API_TABLE, null, null);
Log.v(TAG, "Bulk inserting new data into db.");
bulkinsert(API_TABLE, allValues);
Log.v(TAG, "Stored data in the database.");
字段和类型数据:
public final static String[] API_KEYS = {KEY_STATION, KEY_API,
KEY_POLLUTANT, KEY_SO2, KEY_NOX, KEY_CO, KEY_PHOTO, KEY_TSPRSP,
KEY_RSP};
public final static String[] API_TYPES = {"TEXT PRIMARY KEY", "TEXT",
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"};
数据库构建是这样完成的:
StringBuilder dbCommand = new StringBuilder();
dbCommand.append("CREATE TABLE " + API_TABLE + " (");
dbCommand.append("'" + API_KEYS[0] + "' " + API_TYPES[0]);
for (Integer i = 1; i < API_KEYS.length; i++)
dbCommand.append(", '" + API_KEYS[i] + "' " + API_TYPES[i]);
dbCommand.append(");");
Log.v(TAG, "Creating API database now.");
db.execSQL(dbCommand.toString());
要插入的值存储在 ContentValues[] 对象中,然后使用
context.getContentResolver().bulkInsert(API_URI, values);
关于如何改进这一点的任何想法?特别是插入时间太长了。