看到一遍关于SQLiteDatabase 的execSQL方法和SQLiteStatement的executeInsert的执行效率之比。文中最终得出结论后者比前者效率高,带着疑惑的心态让验证了一把却得出了截然相反的结论。无论在数据量大小或则是否开启事务操作上SQLiteDatabase 的execSQL的执行效率还是要比SQLiteStatement的executeInsert高。
以下就是我所做的一个验证过程
新建一个数据库和test表
public class DBhelper extends SQLiteOpenHelper {
private static final String DATABAS_NAME = "testdb";
private static final int DATABAS_VERSION = 1;
public DBhelper(Context context) {
super(context, DATABAS_NAME, null, DATABAS_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
StringBuffer sql =new StringBuffer();
sql.append("create table test");
sql.append("(_id int PRIMARY KEY,name varchar,gender int,age int,phoneNumber varchar,address varchar)");
db.execSQL(sql.toString());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
使用SQLiteDatabase 的execSQL方法和SQLiteStatement的executeInsert方法进入插入, 比较执行所需要的时间:
public class Dao {
private DBhelper dbHelper;
private SQLiteDatabase db;
private StringBuffer sql_insert;
private List<Tester> testers;
public Dao(Context context) {
this.dbHelper = new DBhelper(context);
this.db = dbHelper.getWritableDatabase();
sql_insert = new StringBuffer();
sql_insert
.append("INSERT INTO test(name,gender,age,phoneNumber,address) ");
sql_insert.append(" VALUES( ?, ?, ?, ?, ?)");
testers = new ArrayList<Tester>();
// 测试数据
for (int i = 0; i < 1000; i++) {
Tester tester = new Tester();
tester.setId(i);
tester.setName("name" + i);
tester.setGender(0);
tester.setAge(123);
tester