SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用。
第一个参数不用说,当然还是表名,表示我们希望从哪张表中查询数据。第二个参数用于指定去查询哪几列,如果不指定则默认查询所有列。第三、第四个参数用于去约束查询某一行或某几行的数据,不指定则默认是查询所有行的数据。第五个参数用于指定需要去 group by 的列,不指定则表示不对查询结果进行 group by 操作。第六个参数用于对 group by 之后的数据进行进一步的过滤,不指定则表示不进行过滤。第七个参数用于指定查询结果的排序方式,不指定则表示使用默认的排序方式。
Cursor cursor = mSqLiteDatabase.query(DatabaseHelper.DATABASE_NAME,null,null,null,null,null,null); if (cursor.moveToFirst()){ int count = cursor.getCount(); for (int i = 0; i < count; i++) { String userName = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.USERNAME)); String age = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.AGE)); Log.i(MainActivity.class.getSimpleName(),i+":"+userName+"|"+age); } } 上面是最简单的一种查询功能,首先使用 query()方法表示希望查询这张表中的数据;接着调用moveToFirst()方法将数据的指针移动到第一行位置,然后进入一个循环,去遍历查询到的每一行数据。前面讲的是利用Android中的DatabaseHelper提供的API对数据库进行操作,我们也可以直接使用SQL语言进行操作。例如删除数据的代码:
<pre name="code" class="java">db.execSQL("delete from Book where price>?",new String[]{"20"}); 添加数据的代码: db.execSQL("insert into Book (name, autho, price) values(?, ?, ?, ?)",new String[] { "The Da Vinci Code", "Dan Brown", "16.96" }); 查询数据的代码: db.rawQuery("select * from Book", null); 可以看到,查了查询数据的时候调用的是SQLiteDatabase的rawQuery()方法,其他的操作都是调用execSQL()方法。SQLite 数据库是支持事务的,事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成。那我们为什么要使用事务呢?
考虑这种情况,比如你正在进行一次转账操作,银行会将转账的金额先从你的账户扣除,然后再向收款方的账户添加等量的金额。可是,如果当你的账户中的金额刚刚被扣除,这时由于一些原因导致对方收款失败,那这一笔钱就凭空消失了。这时我们可以使用事务这种技术,保证扣钱和收款要么一起成功,要么一起失败。
<span style="white-space:pre"> </span>mSqLiteDatabase.beginTransaction(); //开启事务 try { mSqLiteDatabase.delete(DatabaseHelper.DATABASE_NAME,null,null); if (true){ //这里手动抛出一个异常,让事务失败 throw new NullPointerException(); } ContentValues contentValues = new ContentValues(); contentValues.put(DatabaseHelper.USERNAME,"Frank"); contentValues.put(DatabaseHelper.AGE,"10岁"); mSqLiteDatabase.insert(DatabaseHelper.DATABASE_NAME,null,contentValues); //删除操作和添加操作同时成功或失败 mSqLiteDatabase.setTransactionSuccessful(); // 事务已经执行成功 }catch (Exception e){ e.printStackTrace(); }finally { mSqLiteDatabase.endTransaction(); //结束事务 } 总结:对于三种数据持久化的方法,文件适用于存储一些简单的文本数据或者二进制数据,SharePreferences适用于存储一些键值对,而数据库适合存储那些复杂的关系型数据。
1、快捷键Ctrl+Shift+A弹出对话框中可以输入要执行的操作的名字,可快速执行操作;
2、用上述快捷键输入ADB Clear清除这个工程在手机中的数据,和安卓系统中setting工具的清除工具是一样的效果;
3、原始的SQL语句执行效率更高,如rawQuery、execSQL语句;