在我的应用程序中,我使用的是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)

10-01 03:36
查看更多