欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

android中有关SQLite数据库的特性和概念加使用方法详解!

来源: 开发者 投稿于  被查看 22419 次 评论:21

android中有关SQLite数据库的特性和概念加使用方法详解!



2. 数据库的操作流程
[使用条件] 准备数据库系统(MySQL) --> 创建数据库(DATABASE) --> 创建/设计数据表(TABLE) --> 数据操作
[数据操作] 连接数据库(Connection) --> 准备SQL语句(String sql) --> 执行SQL语句(Statement/PreparedStatement) --> 处理结果(int/ResultSet)




3. 使用SQLite
1) 创建数据库
openOrCreateDatabase(String name, int mode, CursorFactory factory)
String name:数据库文件名,例如users.db,使用SQLite可以不强求数据库文件的扩展名。
int mode:访问模式,应该使用常量。
CursorFactoty factory:游标工厂,通常使用null。
数据库创建成功后,会保存在 /data/data/包名/databases/ 下


2) 创建数据表
openOrCreateDatabase()的返回值为SQLiteDatabase对象,使用该对象的execSQL(String sql)方法即可执行SQL指令
CREATE TABLE dictionary (_id INTEGER PRIMARY KEY AUTOINCREMENT, en VARCHAR(50) NOT NULL UNIQUE, zh VARCHAR(50) NOT NULL);


3) 数据操作
使用execSQL(String sql)用于执行单一的没有变量的SQL语法,即不需要预编译的,通常表现为与数据表相关的操作,使用execSQL(String sql, Object[] bindArgs)用于执行与数据本身相关的操作。
execSQL()方法没有返回值,绝对不可以用于查询,亦不推荐用于执行增加、修改、删除操作。
android官方推荐execSQL()不用于执行任何增删改查的数据操作。


4) 认识ContentValues类
在数据操作中,使用insert / update ... 方法需要使用该类型的数据,其本质上是操作HashMap,其中Key对应数据表中的字段名,Value对应其操作的字段的数据


5) 使用db.insert(String table, String nullColumnHack, ContentValues values)插入记录
String table:表名
String nullColumnHack:仅当第3个参数values为null或者没有值(values.size==0)时需要,用于保全sql语句是完整的
ContentValues values:配置需要操作的字段与字段的值
返回值:出现错误时返回-1,否则返回插入的记录的ID


6) 使用db.update(table, values, whereClause, whereArgs)修改记录
String table:表名
ContentValues values:同上
whereClause:where子句,不要添加"where"字符,该参数值例如"_id=? or (username=? and password=?)"
whereArgs:where子句中的参数,应该与whereClause中的问号匹配
返回值:受影响的行数


7) 使用db.delete(String table, String whereClause, String[] whereArgs)删除记录
各参数的说明同上
返回值:受影响的行数


8) 使用db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)查询记录
String table:表名
String[] columns:字段列表
String selection:参见之前的whereClause
String[] selectionArgs:参见之前的whereArgs
String groupBy:Group By(分组)子句
String having:Having子句
String orderBy:Order By(排序)子句
String limit:limit(分页)子句


9) 认识Cursor
类似于JDBC的ResultSet接口
主要掌握getXXXX()和moveXXXX()方法


10) 认识SQLiteOpenHelper
构造方法的参数
Context context:上下文对象
String name:数据库名,文件名,例如tarena.db
CursorFactory factory:游标工厂,取值为null
int version:当前版本,不可低于同应用的历史版本号

onCreate():创建数据库时执行
onUpgrade():数据库版本升级时执行

getReadableDatabase()与getWritableDatabase(),其中,getReadableDatabase()会尝试获取可写的SQLiteDatabase,但是,当存储空间不足时,会返回只读的SQLiteDatabase,避免程序错误。


11) SimpleCursorAdapter
使用Cursor作为数据源的SimpleAdapter,其中,Cursor中必须包含 _id 的字段,参数String[] from的值为Cursor中的ColumnName



** 数据库中的char与varchar
char是定长的,如果字符串长度不足约定的长度,则在原字符右侧补空格,例如char(8)中存"xyz"将表现为"xyz ",varchar是变长的,长度由字符串本身决定。

** SQLite是对数据类型要求不严格的数据库

任意的字段都可以接受任意数据类型的数据,但是,不推荐随意填充数据


用户评论