查看 sqliteDatabase 中,在上一讲中有讲到 execsql (String sql,Object[] bindArgs) 这个方法,在这里Android建议我们在操纵数据库的时候用以下几种方式:
1) 插入:insert(String,String,ContentValues)insertOrThrow(String,ContentValues)insertWithOnConflict(String,ContentValues,int)
2) 更新:update(String,String[])updateWithOnConflict(String,String[],int)
3) 删除:
1. 方法概要
1) 查看API文档 sqliteDatabase 中的
public long insert (String table,String nullColumnHack,ContentValues values)
插入一行数据到数据库中
public long insert (String table,String nullColumnHack,ContentValues values)
插入一行数据到数据库中
参数:table : 需要插入行的表的名称nullColumnHack : 这个参数是可选的,可以为null,sql 不允许插入一个至少一列都不命名的完全空的行。如果你提供的 values 是空的,而且
没有已知的的列名,这就是一个空行,这是不能被插入的。如果设置非空,nullColumnHack 参数提供一个可为空的列的名称,当插入的 values 是空的时候,就将这个列名置为NULL,然后values值插入。values : 指定行对应的列的值,这个类型很类似Map,key表示列的名称,values表示列的值返回值:返回新插入的行的ID,如果存在错误默认返回 -1
参数:table :表示表名返回值:
3)查看API文档sqliteDatabase 中的
public int update (String table,ContentValues values,String[] whereArgs)
更新操作
参数 :返回值:返回所更新的数据库的行数
4)查看API文档sqliteDatabase 中的
查询操作 query(),可以发现 sqliteDatabase 中有大量的 query() 查询的重载方法,其实这边它不管怎么重载,都是遵循 sql 语句来的这里我就剖析一个最为常见的查询方法,其他的读者自己查看文档说明.
public Cursor query (boolean distinct,String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit)
参数:distinct : 判断是否返回的行是唯一值,如果想要返回唯一的行,则为true,否则为false。columns : 需要返回的列,如果要返回所有列则置为null。 selectionArgs :过滤条件的占位符,这里的值会代替过滤语句中 "?"。having : 对分组过滤条件的占位符操作。
2. 代码实现
1) 程序布局文件 activity_main.xml,这里只是定义了几个按钮,就不贴出来了
2) DBOpenHelper.java 用来创建数据库使用
3) PersonService2.java 定义操作数据库(增删改查)的接口
- packagecom.android.sqlitedemo.db;
- importandroid.content.Context;
- importandroid.database.sqlite.sqliteDatabase;
- importandroid.database.sqlite.sqliteOpenHelper;
- publicclassDBOpenHelperextendssqliteOpenHelper{
- privatestaticStringname="mydb.db";//表示数据库的名称
- staticintversion=1;//表示数据库的版本号
- publicDBOpenHelper(Contextcontext){
- super(context,name,null,version);
- //TODOAuto-generatedconstructorstub
- }
- //当数据库创建的时候,是第一次被执行,完成对数据库的表的创建
- @Override
- voidonCreate(sqliteDatabasedb){
- //TODOAuto-generatedmethodstub
- //sqlite数据创建支持的数据类型:整型数据,字符串类型,日期类型,二进制的数据类型
- //数据库这边有一个特点,就是sqlite数据库中文本类型没有过多的约束,也就是可以把布尔类型的数据存储到文本类型中,这样也是可以的
- Stringsql="createtableperson(idintegerprimarykeyautoincrement,namevarchar(64),addressvarchar(64),sexvarchar(8))";
- db.execsql(sql);//完成数据库的创建
- @Override
- voidonUpgrade(sqliteDatabasedb,153); font-weight:bold; background-color:inherit">intoldVersion,153); font-weight:bold; background-color:inherit">intnewVersion){
- //TODOAuto-generatedmethodstub
- }
- }
copy