在我的应用程序中,我使用的是sqlite数据库。此数据库get由dbhelper类创建(如果尚未创建)。
最初我需要一个大约有30行的表。什么是最好的做法,用数据填充它?这是我的密码。它工作得很好,但我觉得有更好的方法吗?
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context){
super(context, DATABASE_NAME , null, 1);
}
private static final String DATABASE_TABLE_QUOTES = "quotes";
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_QUOTES = "CREATE TABLE IF NOT EXISTS `" + DATABASE_TABLE_QUOTES + "` (\n" +
"\t`quote_id`\tINTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
"\t`quote`\tTEXT NOT NULL\n" +
");";
db.execSQL(CREATE_TABLE_QUOTES);
db.execSQL("INSERT INTO " + DATABASE_TABLE_QUOTES + "VALUES (1, 'test 1')");
db.execSQL("INSERT INTO " + DATABASE_TABLE_QUOTES + "VALUES (2, 'test 2')");
db.execSQL("INSERT INTO " + DATABASE_TABLE_QUOTES + "VALUES (3, 'test 3')");
db.execSQL("INSERT INTO " + DATABASE_TABLE_QUOTES + "VALUES (4, 'test 4')");
// ........
}
}
最佳答案
既然你要求最佳实践,我引用这个答案
您应该使用statements
database.beginTransaction();
SQLiteStatement stmt = database.compileStatement(sql);
for (int i = 0; i < NUMBER_OF_ROWS; i++) {
//generate some values
stmt.bindString(1, randomName);
stmt.bindString(2, randomDescription);
stmt.bindDouble(3, randomPrice);
stmt.bindLong(4, randomNumber);
long entryID = stmt.executeInsert();
stmt.clearBindings();
}
database.setTransactionSuccessful();
database.endTransaction();
Reference
这里是one more link这两种插入方法的比较。(对于100条记录,正常插入需要1657ms,而
endTransaction()
语句需要92ms)