目录
SQLiteDatabase
SQLiteDatabase
类用于打开(不存在即创建)数据库、操作数据库中的数据。
打开/创建数据库
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
openOrCreateDatabase()
是SQLiteDatabase
类中的静态方法,用以打开或创建一个数据库(系统自动检测指定路径的数据库是否存在,存在即打开,不存在即创建)。openOrCreateDatabase()
可能会因为操作失败抛出FileNotFoundException
异常。
参数:
String path
:数据库的路径。
SQLiteDatabase.CursorFactory factory
:一般为null
即可。
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/data/data/com/lishaoyin/test/test.db",null);
建表
SQLite将数据库的存储结构抽象为表格结构:database
contains table
⇨ table
contains row
⇨ row
contains column
;而具体的数据则保存在column
中。
table的基本单元为行,行中每个单元存放的数据键(名称)、数据类型、操作要求等由表头指定。因此建表时必须明确指定表头。例如:
String value_ta1 = "create table if not exsits db.table1(
id integer primary key autoincrement,
name text not null unique,
number integer not null default 0,
sex text default 'boy')";
//execute SQLite operation
db.execSQL(value_ta1);
以上代码中的id integer primary key autoincrement,name text not null unique,number integer not null default 0
指定了表头格式,以后在表中插入的行需要兼容表头格式。
表头中每个单元格的声明格式为:<单元名> <数据类型> <其它属性>。例如以上代码中表头的第一个单元格单元名为id
,类型为integer
,其它属性为primary key(主键)
,autoincrement(值自动增长)
。主键可以理解为行的键,主键不需要开发者操作,系统可自动管理。
以上代码可抽象为一张表格:
(id) | name | number | sex |
---|---|---|---|
(系统自动管理) | 不可为空,不可重复 | 不可空,默认为0 | 默认为boy |
插入数据
①使用SQLiteDatabase
对象的insert(String table,String nullColumnHack,ContentValues values)
方法。
参数:
String table
:表名。
String nullColumnHack
:空列默认值。
ContentValues values
:数据map。
ContentValues content = new ContentValues();
content.put("name","Tony Stark");
content.put("number",123456);
content.put("sex","boy");
db.insert("db.table1",null,content);
②使用SQL语句插入数据:
String value_ins1 = "insert into db.table1(name,number,sex) values('Lishaoyin',123456,'boy')";
//execute SQLite operation
db.execSQL(value_ins1);
修改数据
①使用SQLiteDatabase
对象的update(String table,ContentValues values,String whereClause, String[] whereArgs)
方法。
参数:
String table
:表名。
ContentValues values
:更改数据的ContentValues对象。
String whereClause
:单个更改条件,例如行的主键、某一项的值等。若此标识可匹配到多行,则被匹配的所有行都将被修改。
String[] whereArgs
:更改条件数组,即要求满足多个条件时可用数组指出。
String table = "value_ta1"; //table name
ContentValues values = new ContentValues;
values.put("name","Jerry");
values.put("number",911);
String whereClause = "name='Tony Stark'";
String[] whereArgs = {"name='Tony Stark'"};
db.update(table,values,whereClause,whereArgs);
②使用SQL语句更改数据:
String value_up1 = "updata db.table1 set name='Jerry',number=911 where name='Tony Stark'";
//execute SQLite operation
db.execSQL(value_up1);
注意:update()
方法会返回更改表的次数;若不设置更改条件,则表中的所有行中对应的数据都将被更改。
删除数据
①使用SQLiteDatabase
对象的delete(String table,String whereClause, String[] whereArgs)
方法。
String table = "db.table1";
String whereClause = "name='Tony Stark'";
String whereArgs = {"name='Tony Stark'"};
db.delete(table,whereClause,whereArgs);
②使用SQL语句删除数据:
String value_de1 = "delete from db.table1 where name='Tony Stark'";
//execute SQLite operation
db.execSQL(value_de1);
注意:delete()
方法会返回删除数据的次数;若不设置更改条件,则表中的所有数据都将被删除。
删除一条数据后,位于被删除数据之后的数据将向前缩进一位。
删表
String value_deleteTable = "drop table db.table1";
//execute SQLite operation
db.execSQL(value_deleteTable);
Cursor
Cursor
用以查询表中的数据。
Cursor的获取
使用SQLiteDatabase
对象的query()
方法获取Cursor
对象。query()
的定义为:
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
第一个参数为表名,其余参数一般给null
即可。
Cursor cursor = db.query("db.table1",null,null,null,null,null,null);
Cursor的常用方法
01.getCount()
:获取表中数据总项数,即表的行数。
02.isFirst()
:判断是否是第一项记录(第一行)。
03.isLast()
:判断是否是最后一项记录(最后一行)。
04.moveToFirst()
:移动到第一条记录,第一条记录为空则返回false
。
05.moveToLast()
:移动到最后一条记录,最后一条记录为空则返回false
。
06.move(int offset)
:移动指定偏移。
07.moveToNext()
:移动到下一条记录。
08.moveToPrevious()
:移动到上一条记录。
09.getColumnIndexOrThrow(String columnName)
:根据列名称获取列的索引。
10.getInt(int columnIndex)
:获取指定索引列数据的int型值。
11.getString(int columnIndex)
:获取指定索引列数据的String型值。
SQLiteOpenHelper:
SQLiteOpenHelper
类提供了辅助创建/打开/关闭数据库的方法。使用SQLite需要创建一个类继承SQLiteOpenHelper
类并实现其中的方法。
注意:SQLiteOpenHelper
类只是一个SQLite辅助工具,可以使用此类管理SQLite版本的更变等。
SQLiteOpenHelper类中的常用方法:
getReadableDatabase
只读方式打开数据库。返回一个可操作的对象,用于数据的查询。
getWritableDatabase
读写方式打开数据库。返回一个可操作的对象,用于数据的添加/修改/删除。
onCreate(SQLiteDatabase db)
创建数据库时回调的方法。继承类必须重写此方法。
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
升级数据库时回调的方法。继承类必须重写此方法。
onOpen(SQLiteDatabase db)
打开数据库时回调的方法。
close()
关闭数据库。
SQLite数据共享的限制
①创建在/data/data/package/
的数据库是App私有数据库。
②创建在SDCard
的数据库是公共数据库。将数据库创建在SDCard需要在Manifest
中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
欢迎指正