SQLiteDatabase之execSQL()和rawQuery()

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)查询(Retrieve)更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。

对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。

execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句

rawQuery()方法用于执行select语句。


一,execSQL()方法的使用例子:

SQLiteDatabase sqLiteDatabase = ....;
sqLiteDatabase.execSQL("insert into person(name, age) values('测试数据', 4)");
sqLiteDatabase.close();

执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“测试数据”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。

要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。

SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:

SQLiteDatabase sqLiteDatabase = ....;
sqLiteDatabase .execSQL("insert into person(name, age) values(?,?)", new Object[]{"测试数据", 4}); 
sqLiteDatabase .close();
execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。


二,rawQuery()用于执行select语句,使用例子如下:

SQLiteDatabase sqLiteDatabase = ....;
Cursor cursor = sqLiteDatabase .rawQuery("select * from person",null);
//......
cursor.close();
sqLiteDatabase .close();
rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:
Cursor cursor = sqLiteDatabase.rawQuery("select * from personwhere name like ?and age=?", new String[]{"%iteedu%", "4"});


你可能感兴趣的:(数据库,Android开发)