Android提供了SQLDatabase代表一个数据库 (底层就是一个数据库文件)
静态方法打开一个文件对应的数据库:
static SQLiteDAtabase openDatabase (String path,SQLiteDatabase.Cursor Factory factory ,int flags)
打开path文件所代表的SQL数据库。
static SQLiteDatabase openOrCreateDatabase (File file,SQLiteDatabase.Cursor Factory factory)
打开或创建(如果不存在)file文件所代表的SQL数据库
static SQLiteDatabase openOrCreateDatabase (String path,SQLiteDAtabase.Cursor Factory factory)
打开或创建(如果不存在)path所代表的SQL数据库
获取了SQLiteDatabase对象之后,就可以操作数据库,方法:
execSQL (String sql,Object[] bindArgs ):执行带占位符的SQL语句
execSQL (String sql) : 执行SQL语句
insert(String table ,String nullCOlumnHack ,ContentValues values):向执行表中插入数据
update(String table , ContentValues values ,String whereClause, String[] whereArgs):更新指定表中的特定数据
delete(Strig table ,String whereClause ,String[] whereArgs):删除指定表中的特定数据
Cursor query (String table ,String[] columns String whereClause,String[] whereArgs,String groupBy ,String having,String orderBy):
对执行数据表进行查询
Cursor query (String table ,String[] columns,String whereClause ,String[] whereArgs,String gruopBy,String having,String orderBy,String limit):
对执行数据表执行查询,limit参数控制最多查询几条记录。
Cursor query (boolean distinct,String table,String[] columns ,String whereClause,String[] whereArgs,String groupBy ,String having ,String orderBy,String limit):
对指定表执行查询语句,其中第一个参数控制是否取出重复值。
rawQuery(String sql ,String[] selectionArgs):执行带占位符的SQL查询
beginTransaction ():开始事务
endTransaction ():结束事务
Cursor提供如下方法来移动查询结果的记录指针:
move (int offset):将记录指针向上或向下移动指定的行数。offset为正数就是向下移动,为负数就是向上
boolean moveToFirst ():将记录指针移动到第一行,如果移动成功,返回true
boolean moveToLast ():将记录指针移动到最后一行,移动成功,返回true
boolean moveToNext():将记录指针移动到下一行,移动成功,返回true
boolean moveToPosition (int position): 将记录指针移动到指定的行,移动成功,返回true。
boolean moveToPrevious ():将记录指针移动到上一行,移动成功,返回true。
/************************************/
创建一个数据库:
SQLiteDatabase.openOrCreateDatabase ("/mnt/db/temp.db3",null);
打开或者创建一个数据库,如果/mn/db/ 目录下的temp.db3文件存在,那么程序就是打开数据库,如果不存在就会在该目录下创建temp.db3文件。
建表语句:
String sql = "create table person (_id integer primarykey,name varchar(64),age integer)";
调用db.execSQL (sql);
插入:
insert into person(name, age) values ('zhangsan' , 20);
insert into person (name,age) values ('?,?'); new Object[] {person.getName (), person.getAge ()};
删除:
delete from person where_id = 1;
修改:
update person set name = '李四' where name = '王五'
查询:
select * from person;//查询所有 ---> 游标结果集
select * from person where name='zhangsan' //查询单个
使用特定的方法来操作数据库:
插入insert :
long insert (String table ,String nullColumnHack , ContentValues values ):
table:代表想插入数据的表名
nummColumnHack:代表强行插入null值得数据列的列名。当values参数为null或不包含任何key-value对时该参数有效
values:代表一行记录的数据。
返回新加的记录的行号。
更新update:
update (String table , ContentValues values , String whereClause ,String[] whereArgs)
table:代表想更新数据的表名
values:代表想更新的数据
whereClause:满足该句的记录将会被更新
whereArgs:用于为whereClause传递参数
返回受此方法影响的记录的条数。
删除delete:
delete (String table ,String whereClause,String[] whereArgs):
该方法返回受此方法影响的记录的条数。
查询query :
Cursor query (boolean distinct, String table, String[] columns, String[] selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
distinct:指定是否去除重复记录
table:执行查询数据的表名
columns:要查询出来的列名
selection:查询条件
selectionArgs:用于为selection传递参数
groupBy:用于控制分组
having:用于对分组进行过滤
orderBy:用于对记录进行排序
limit:用于进行分页。
事务:
SQLiteDatabase 中包含两个方法来控制事务:
beginTransaction():开始事务
endTransaction():结束事务
inTransaction ():如果当前上下文处于事务中,返回true
setTransactionSuccessful():设置事务标志,如果程序事务执行中调用该方法,则会对数据库进行一系列的用户想要进行的
修改,如果没有设置该方法,则不会对数据库进行任何操作,也称作回滚。