Android学习笔记(九)
- 使用SQL操作数据库
- 添加数据:
db.execSQL("insert into Book(name,author,pages,price) values(?,?,?,?)",new String[] ("The Da Vinci Code","Dan Brown"."454",16.96"});
- 更新数据:
db.execSQL("update Book set price = ? where name = ?",new String[] = {"10.99","the Da Vinci Code"});
- 删除数据:
db.execSQL("delete frome Book where pages>?",new String[] {"500"});
- 查询数据:
db.rawQuery("selece * from Book", null);
- 添加数据:
- SQLite数据库实践
- 事务:保证某一系列的操作要么全部完成,要么一个都不会完成。
- 开始事务:
db.beginTransaction()
- 在异常捕获的代码块中去执行具体的数据库操作
- 在finally中执行结束事务:
db.endTransaction()
- 开始事务:
- 升级数据库较优写法:在onUpgrade方法中通过switch的方法来判定升级版本,并且执行不同的升级操作。
- 事务:保证某一系列的操作要么全部完成,要么一个都不会完成。
- 内容提供器(Content Provider):用于在不同的应用程序之间实现数据共享的功能,提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。
- 内容提供器的用法:现有的内容提供器来读取和操作和创建自己的程序的数据提供外部访问接口。
- ContentResolver:用来访问内容提供器中的共享的数据。
- 通过Context中的getContentResolver()方法获取到该类实例
- 通过insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方法用于查询数据。
- 与SQLIite不同,增删改查的第一个参数不接收表名参数,而是使用了一个URI参数代替(内容URI给内容提供器中的数据建立了唯一标识符)。
- 内容URI由两部分组成,权限(authority|用于区分不同应用程序)和路径(path|用于区分同一应用程序中不同的表)。例如:content://com.example.app.provider/table1.
- 内容URI转换为Uri对象:调用Uri.parse( )
Uri uri = Uri.parse("content://com.example.app.provider/table1")
- 查询Uri对象来查询table1表中的数据:getContentResolver().query(),传入五个参数,第一个参数uri.第二个参数projection指定查询的列名,第三个参数selection指定where的约束条件,第四个参数selectionArgs为where中的占用符提供具体的值,第五个参数orderBy指定查询结果的排序方式。
- 创建内容提供器
- 通过新建一个类去继承ContentProvider的方法来创建内容提供器
- 需要重写6个方法,onCreat()、query()、insert()、update()、delete()、getType()
- 内容URI可以以路径结尾期望访问该表所有数据,也可以以ID结尾期望访问该表中拥有相应ID的数据
- 通过UriMatcher这个类实现匹配内容URI的功能。UriMatcher提供了一个addURI()的方法,传入三个参数,第一个参数为权限,第二个参数为路径,第三个参数是自定义代码。之后通过UriMatcher的match()方法匹配Uri,匹配成功会返回自定义代码,然后就可以判断调用方期望访问的数据类型了。
- getType()方法:用于获取Uri对象所对应的MIME类型。MIME类型以vnd开通,如果内容URI以路径结尾,则后接android.cursor.dir/,如果内容URI以Id结尾,则后接android.cursor.item/最后接上vnd.< authority >. < path >