首次安装时,我的应用必须缓存从网络获取的数据,并将行插入SQLite数据库。我最终得到了大约700个插件,至少需要15秒。目前我的逻辑如下(伪):
ScrollThroughAllObjects(){
if(objectDoesNotExist){
cacheObject();
}
}
cacheObject(Object ob){
ContentValues values = new ContentValues();
values.put(KEY_ID, ob.getId);
// add lots more values
return mDb.insert(DATABASE_TABLE, null, values);
}
我是否有更有效,更快捷的方式处理此插入内容?
答案 0 :(得分:6)
使用 SQLite交易执行记录插入。它将惊人地加速整个过程;因为当您执行单个插入(一次一个)时,SQLite将每个插入视为一个事务,并且需要为每次执行创建 Journal-file (这需要时间)。但是,当您将所有添加/编辑/删除查询绑定到单个事务时,在整个事务结束时只创建一个日记文件,导致SQLite快速执行查询。
答案 1 :(得分:0)
将整个操作包装在一个事务中。仅此一项就可以为您带来巨大的速度提升,并为您提供交易行为的好处。
答案 2 :(得分:0)
您应该使用bulkInsert
方法。您可以从SQLiteContentProvider获取代码。根据您的需要进行修改。
答案 3 :(得分:0)
创建并连接到数据库
首先将android.databse.sqlite.SQLiteDatabase导入您的应用程序。然后使用openOrCreateDatabase()方法创建或连接到数据库。 Sqlite documentation
onCreate() - 这是我们需要编写create table语句的地方。在创建数据库时调用此方法。 onUpgrade() - 在升级数据库时调用此方法,如修改表结构,向数据库添加约束等,
公共类DatabaseHandler扩展了SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "contactsManager";
// Contacts table name
private static final String TABLE_CONTACTS = "contacts";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
// Create tables again
onCreate(db);
}
插入记录
Android附带了一系列简化数据库使用的类。使用ContentValues实例创建一系列表字段到数据匹配,这些匹配将传递给insert()方法。 Android已经创建了类似的更新和删除记录的方法。
addContact()
方法接受Contact对象作为参数。我们需要使用Contact对象构建ContentValues参数。一旦我们在数据库中插入数据,我们就需要关闭数据库连接。
// Adding new contact
public void addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName()); // Contact Name
values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
db.close(); // Closing database connection
}
请参阅此link的完整文章。
观看此video,这是一个简单的定义,如何创建表并将数据插入到android中。
最后不要错过这个,Android SQLite:插入,更新,删除和显示数据(Link)。