SQLite

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 tabletable contains rowrow 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)namenumbersex
(系统自动管理)不可为空,不可重复不可空,默认为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"/>

欢迎指正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值