- /*
- Android提供了一个名为sqliteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对sqliteDatabase的学习,我们应该重点掌握execsql()和rawQuery()方法。execsql()方法可以执行insert、delete、update和CREATETABLE之类有更改行为的sql语句;rawQuery()方法用于执行select语句。
- execsql()方法的使用例子:
- sqliteDatabasedb=....;
- db.execsql("insertintoperson(name,age)values('测试数据',4)");
- db.close();
- 执行上面sql语句会往person表中添加进一条记录,在实际应用中,语句中的“测试数据”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句,当用户输入的内容含有单引号时,组拼出来的sql语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“&”这些特殊sql符号,为保证组拼好的sql语句语法正确,必须对sql语句中的这些特殊sql符号都进行转义,显然,对每条sql语句都做这样的处理工作是比较烦琐的。sqliteDatabase类提供了一个重载后的execsql(Stringsql,Object[]bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:
- execsql(Stringsql,Object[]bindArgs)方法的第一个参数为sql语句,第二个参数为sql语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。
- */
copy
- publicclassDatabaseHelperextendssqliteOpenHelper{
- //类没有实例化,是不能用作父类构造器的参数,必须声明为静态
- privatestaticfinalStringname="itcast";//数据库名称
- finalintversion=1;//数据库版本
- publicDatabaseHelper(Contextcontext){
- //第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类
- super(context,name,null,version);
- }
- @OverridevoidonCreate(sqliteDatabasedb){
- db.execsql("CREATETABLEIFNOTEXISTSperson(personidintegerprimarykeyautoincrement,namevarchar(20),ageINTEGER)");
- }
- voidonUpgrade(sqliteDatabasedb,153); background-color:inherit; font-weight:bold">intoldVersion,153); background-color:inherit; font-weight:bold">intnewVersion){
- db.execsql("ALTERTABLEpersonADDphoneVARCHAR(12)NULL");//往表中增加一列
- //DROPTABLEIFEXISTSperson删除表
- //在实际项目开发中,当数据库表结构发生更新时,应该避免用户存放于数//据库中的数据丢失。