使用 SQLiteDatabase 操作 SQLite 数据库
-
-
- 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语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。
- */
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删除表
- //在实际项目开发中,当数据库表结构发生更新时,应该避免用户存放于数//据库中的数据丢失。