package com.litesuits.orm.test; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.litesuits.orm.LiteOrm; import com.litesuits.orm.db.assit.QueryBuilder; import com.litesuits.orm.db.assit.SQLiteHelper; import com.litesuits.orm.db.assit.Transaction; import com.litesuits.orm.log.OrmLog; import com.litesuits.orm.model.single.Boss; import com.litesuits.orm.model.single.Man; import java.util.ArrayList; import java.util.List; /** * @author MaTianyu @http://litesuits.com * @date 2015-09-10 */ public class SqliteUtils { private static final String TAG = SqliteUtils.class.getSimpleName(); public static SQLiteHelper helper; public static boolean testLargeScaleUseLiteOrm(final LiteOrm liteOrm, int max) { boolean logPrint = OrmLog.isPrint; OrmLog.isPrint = false; Log.i(TAG, " lite-orm test start ..."); // 1. 初始化数据 final List<Boss> list = new ArrayList<Boss>(); for (int i = 0; i < max; i++) { Boss boss = new Boss(); boss.setAddress("ZheJiang Xihu " + i); boss.setPhone("1860000" + i); boss.setName("boss" + i); list.add(boss); } long start, end; int num; // 2 批量插入测试 start = System.currentTimeMillis(); num = liteOrm.insert(list); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm insert boss model num: " + num + " , use time: " + (end - start) + " MS"); // 2.1 单个插入测试 //start = System.currentTimeMillis(); //for (Boss boss : list) { // liteOrm.insert(boss); //} //end = System.currentTimeMillis(); //Log.i(TAG, " lite-orm insert boss model one by one num use time: " + (end - start) + " MS"); // 3. 查询数量测试 start = System.currentTimeMillis(); long count = liteOrm.queryCount(Boss.class); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm query all boss model num: " + count + " , use time: " + (end - start) + " MS"); // 4. 查询最后10条测试 start = System.currentTimeMillis(); ArrayList subList = liteOrm.query( new QueryBuilder<Boss>(Boss.class).appendOrderDescBy("_id").limit(0, 10)); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm select top 10 boss model num: " + subList.size() + " , use time: " + (end - start) + " MS"); Log.i(TAG, String.valueOf(subList)); // 5. 删除全部测试 start = System.currentTimeMillis(); // direct delete all faster num = liteOrm.deleteAll(Boss.class); // delete list //num = liteOrm.delete(list); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm delete boss model num: " + num + " , use time: " + (end - start) + " MS"); // 6. 再次查询数量测试 start = System.currentTimeMillis(); count = liteOrm.queryCount(Boss.class); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm query all boss model num: " + count + " , use time: " + (end - start) + " MS"); OrmLog.isPrint = logPrint; return true; } public static boolean testLargeScaleUseDefault(Context context, int max) { // 1. 初始化数据,先创建实例并建表,为公平性该时间不计入统计。 final List<Boss> list = new ArrayList<Boss>(); for (int i = 0; i < max; i++) { Boss boss = new Boss(); boss.setAddress("ZheJiang Xihu " + i); boss.setPhone("1860000" + i); boss.setName("boss" + i); list.add(boss); } if (helper == null) { helper = new SQLiteHelper(context, "mydata", null, 1, null); } final SQLiteDatabase wdb = helper.getWritableDatabase(); final SQLiteDatabase rdb = helper.getReadableDatabase(); wdb.execSQL( "CREATE TABLE IF NOT EXISTS boss (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, phone TEXT, address TEXT)"); // 2. 批量插入 long start = System.currentTimeMillis(); wdb.beginTransaction(); try { for (int i = 0; i < max; i++) { Boss boss = list.get(i); ContentValues values = new ContentValues(); values.put("name", boss.getName()); values.put("address", boss.getAddress()); values.put("phone", boss.getPhone()); long id = wdb.insert("boss", "", values); // 注意,非常重要:insert要回执ID给对象 boss.setId(id); //wdb.execSQL("insert into boss (name, address, phone) values (?,?,?)", new String[]{boss.getName(), boss.getAddress(), boss.getPhone()}); } wdb.setTransactionSuccessful(); } finally { wdb.endTransaction(); } long end = System.currentTimeMillis(); Log.i(TAG, " android-api insert boss model num: " + list.size() + " , use time: " + (end - start) + " MS"); // 3. 查询数量测试 start = System.currentTimeMillis(); Cursor cursor = rdb.rawQuery("SELECT COUNT(*) FROM boss", null); long count = 0; if (cursor.moveToFirst()) { count = cursor.getInt(0); } cursor.close(); end = System.currentTimeMillis(); Log.i(TAG, " android-api query all boss model num: " + count + " , use time: " + (end - start) + " MS"); // 4. 查询最后10条测试 start = System.currentTimeMillis(); List<Boss> subList = new ArrayList<Boss>(); cursor = rdb.rawQuery("select * from boss order by id desc limit 0,10", null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Boss boss = new Boss(); boss.setAddress(cursor.getString(cursor.getColumnIndex("address"))); boss.setName(cursor.getString(cursor.getColumnIndex("name"))); boss.setPhone(cursor.getString(cursor.getColumnIndex("phone"))); boss.setId(cursor.getLong(cursor.getColumnIndex("id"))); subList.add(boss); cursor.moveToNext(); } cursor.close(); end = System.currentTimeMillis(); Log.i(TAG, " android-api select top 10 boss model num: " + subList .size() + " , use time: " + (end - start) + " MS"); Log.i(TAG, String.valueOf(subList)); // 5. 删除全部测试 start = System.currentTimeMillis(); long num = wdb.delete("boss", null, null); end = System.currentTimeMillis(); Log.i(TAG, " android-api delete boss model num: " + num + " , use time: " + (end - start) + " MS"); // 6. 再次查询数量测试 start = System.currentTimeMillis(); cursor = rdb.rawQuery("SELECT COUNT(*) FROM boss", null); count = 0; if (cursor.moveToFirst()) { count = cursor.getInt(0); } cursor.close(); end = System.currentTimeMillis(); Log.i(TAG, " android-api query all boss model num: " + count + " , use time: " + (end - start) + " MS"); return true; } public static void testLargeScaleCascadeLiteOrm(LiteOrm liteOrm, int max) { boolean logPrint = OrmLog.isPrint; OrmLog.isPrint = false; // 1. 初始化数据 Boss boss = new Boss(); boss.setAddress("ZheJiang Xihu "); boss.setPhone("1860000"); boss.setName("boss"); boss.setList(new ArrayList<Man>()); for (int i = 0; i < max; i++) { boss.getList().add(new Man(0, "test", i, false)); } long num = 0; // 2. 全部插入测试 long start = System.currentTimeMillis(); num = liteOrm.save(boss); long end = System.currentTimeMillis(); Log.i(TAG, " lite-orm insert boss model num: " + num + " , use time: " + (end - start) + " MS"); // 5. 删除全部测试 start = System.currentTimeMillis(); // direct delete all faster num = liteOrm.deleteAll(Boss.class); // delete list //num = liteOrm.delete(list); end = System.currentTimeMillis(); Log.i(TAG, " lite-orm delete boss model num: " + num + " , use time: " + (end - start) + " MS"); OrmLog.isPrint = logPrint; } }