Android数据存储与IO之二 SQLite数据库
2015-01-31 17:44
423 查看
SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备商适量数据存储(SQLite数据库只是一个文件)
Android提供了SQLiteDatabase代表一个数据库,一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来就可通过SQLiteDatabase对象来管理、操作数据库了
有如下静态方法来打开一个文件对应的数据库
获取SQLiteDatabase对象之后,接下来就可以调用SQLiteDatabase的如下方法来操作数据库了
Android考虑到部分开发者对SQL语法不熟悉,所以提供了上述方法
上述查询方法都是返回一个Cursor,Cursor同样提供如下方法来移动查询结果的记录指针
一旦记录指针移动到指定行之后,接下来就可以调用Cursor的getXxx()方法获取该行的指定列数据
创建数据库和表
SQLiteDatabase.openOrCreateDatabase(“/mnt/db/temp.db3”,null);
上面代码中没有指定SQLiteDatabase.CursorFactory参数,该参数是一个用于返回Cursor的工厂,若指定为null,则意味着使用默认工厂
sql = “create table user_if(user_id integer primary key ,”
+” user_name varchar(255),"
+” user_pass varchar(255))"
db.execSQL(sql);
上面的代码即可在数据库中创建一个数据表
如果需要执行查询语句,则可调用SQLiteDatabase的rawQuery(String sql,String[] selectionArgs)方法,例如
db.execSQL(“insert into news_if values(null,? , ?)",new
String[]{title, content});
sqlite3工具
一个简单的SQLite数据库管理工具,sqlite3中常用命令:
.databases
.tables
.help
SQLite内部只支持NULL、INTEGER、REAL、TEXT和BLOB这5种类型,但实际上SQLite亦可接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过SQLite会在运算或保存时将它们转化为上面5种类型。
另外,SQLite还允许把各种类型的数据保存到任何类型字段中,开发者可以不用关心声明该字段所使用的数据类型;但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的其他类型数据时,会出错
create table my_test
{
_id integer primary key auto increment,
name,
pass,
gender
}
使用特定方法操作SQLite数据库
SQLiteDatabase提供了insert、update、delete、query来操作数据库
SQL语法可以说是基本功中的基本功
事务
SQLiteDatabase中包含如下两个方法来控制事务
beginTransaction()
endTransaction()
当程序执行endTransaction()方法时会结束事务——那到底是提交事务呢,还是回滚事务呢?这取决于SQLiteDatabase是否调用了setTransactionSuccessful()方法来设置事务标志,如果设置了则提交事务,否则回滚事务
另外,SQLiteDatabase还提供了如下方法来判断当前上下文是否处于事务环境中
inTransaction()
//示例代码
db.beginTransaction();
try
{
...
db.setTransactionSuccessful();
}
finally
{
db.endTransaction();
}
SQLiteOpenHelper 类
实际项目中很少使用SQLiteDatabase的方法来打开数据库,通常都会继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()、getWritableDatabase()方法打开数据库
一般用法是创建SQLiteOpenHelper子类,并扩展它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法
SQLiteOpenHelper包含如下常用方法:
重写onCreate(),可以生成数据库表结构及添加一些应用使用到的初始化数据
只要某次创建SQLiteOpenHelper时指定的数据库版本号高于之前指定的版本号,系统就会自动触发onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法
Android提供了SQLiteDatabase代表一个数据库,一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来就可通过SQLiteDatabase对象来管理、操作数据库了
有如下静态方法来打开一个文件对应的数据库
static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags) | 打开path文件所代表的SQLite数据库 |
static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory) | 打开或创建file文件所代表的SQLite数据库 |
static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) |
execSQL(String sql, Object[] bindArgs) | 执行带占位的SQL语句 |
execSQL(String sql) | |
insert(String table,String nullColumnHack, ContentValues values) | 向执行表中插入数据 |
update(String table, ContentValues values, String whereClause, String[] whereArgs) | 更新指定表中特定数据 |
delete(String 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 groupBy,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,Cursor同样提供如下方法来移动查询结果的记录指针
move(int offset) | 将记录指针向上或向下移动指定行数(负则为上) |
boolean moveToFirst() | |
boolean moveToLast() | |
boolean moveToNext() | |
boolean moveToPosition(int position) | |
boolean moveToPrevious() | 将记录指针移动到上一行 |
创建数据库和表
SQLiteDatabase.openOrCreateDatabase(“/mnt/db/temp.db3”,null);
上面代码中没有指定SQLiteDatabase.CursorFactory参数,该参数是一个用于返回Cursor的工厂,若指定为null,则意味着使用默认工厂
sql = “create table user_if(user_id integer primary key ,”
+” user_name varchar(255),"
+” user_pass varchar(255))"
db.execSQL(sql);
上面的代码即可在数据库中创建一个数据表
如果需要执行查询语句,则可调用SQLiteDatabase的rawQuery(String sql,String[] selectionArgs)方法,例如
db.execSQL(“insert into news_if values(null,? , ?)",new
String[]{title, content});
sqlite3工具
一个简单的SQLite数据库管理工具,sqlite3中常用命令:
.databases
.tables
.help
SQLite内部只支持NULL、INTEGER、REAL、TEXT和BLOB这5种类型,但实际上SQLite亦可接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过SQLite会在运算或保存时将它们转化为上面5种类型。
另外,SQLite还允许把各种类型的数据保存到任何类型字段中,开发者可以不用关心声明该字段所使用的数据类型;但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的其他类型数据时,会出错
create table my_test
{
_id integer primary key auto increment,
name,
pass,
gender
}
使用特定方法操作SQLite数据库
SQLiteDatabase提供了insert、update、delete、query来操作数据库
SQL语法可以说是基本功中的基本功
事务
SQLiteDatabase中包含如下两个方法来控制事务
beginTransaction()
endTransaction()
当程序执行endTransaction()方法时会结束事务——那到底是提交事务呢,还是回滚事务呢?这取决于SQLiteDatabase是否调用了setTransactionSuccessful()方法来设置事务标志,如果设置了则提交事务,否则回滚事务
另外,SQLiteDatabase还提供了如下方法来判断当前上下文是否处于事务环境中
inTransaction()
//示例代码
db.beginTransaction();
try
{
...
db.setTransactionSuccessful();
}
finally
{
db.endTransaction();
}
SQLiteOpenHelper 类
实际项目中很少使用SQLiteDatabase的方法来打开数据库,通常都会继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()、getWritableDatabase()方法打开数据库
一般用法是创建SQLiteOpenHelper子类,并扩展它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法
SQLiteOpenHelper包含如下常用方法:
synchronized SQLiteDatabase getReadableDatabase() | 以读写方式打开 |
synchronized SQLiteDatabase getWriteableDatabase() | 以写的方式打开 |
abstract void onCreate(SQLiteDatabase db) | 当第一次创建数据库时回调 |
abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) | 当数据库版本更新时回调 |
synchronized void close() | 关闭所有打开的SQLIteDatabase |
只要某次创建SQLiteOpenHelper时指定的数据库版本号高于之前指定的版本号,系统就会自动触发onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法
相关文章推荐
- Android数据存储与IO之二(File存储之openFile)
- Android开发之数据存储之二:SQLite数据库存储方式【免费提供源码下载】
- android 数据存储和访问方式三:SQLite数据库详解
- android-数据存储-SQLite数据库
- Android 数据存储和IO——SQLite(三)
- Android(三) 数据存储之二 SharedPreferences
- Android的数据存储与IO - 手势
- android基础--使用嵌入式关系型SQLite数据库存储数据
- Android的数据存储和IO
- Android数据存储之SQLite数据库存储数据
- 【转】Android使用嵌入式关系型SQLite数据库存储数据【学习记录】
- Android的数据存储和IO - 自动朗读(TTS)
- android 之数据存储(IO)
- Android中使用嵌入式关系型SQLite数据库存储数据
- Android的数据存储和IO-SD卡文件浏览器
- Android 之 使用嵌入式关系型SQLite数据库存储数据
- 【android学习之十】——数据存储2:SQLite数据库操作
- Android数据存储之二(Internal Storage,内部存储)
- Android的数据存储与IO - 手势
- Android的数据存储和IO-SD卡文件浏览器