android SQLite数据库的使用介绍详解
Posted JonsonWei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android SQLite数据库的使用介绍详解相关的知识,希望对你有一定的参考价值。
SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不同电脑操作系统更在众多的手机系统也是能够运行,比如:android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据
下面介绍一下SQLite数据库的使用方法,及增删改查操作。
Android平台下数据库相关类
1.SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。
2.SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
3.SQLiteCursor 查询结构操作类:用来访问查询结果中的记录。
(1).创建数据库类:
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。
如:
public class StuDBHelper extends SQLiteOpenHelper
public StuDBHelper(Context context, String name, CursorFactory factory,
int version)
super(context, name, factory, version);
// TODO Auto-generated constructor stub
//创建数据表
@Override
public void onCreate(SQLiteDatabase db)
// TODO Auto-generated method stub
String sql="create table stu_table(_id INTEGER PRIMARY KEY AUTOINCREMENT, sname varchar(20),sage int, ssex varchar(10))";
db.execSQL(sql);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
// TODO Auto-generated method stub
说明:
onCreate函数只会在数据库第一次创建时调用,所以此处适合做一些数据库初始化操作。
SQLiteOpenHelper构造函数中的参数name就是数据库名称; version从1开始,当将来数据库的表格以及字段发生变化时,用户可以增加此version值,从而触发onUpgrade()达到旧数据升级的效果。
<pre name="code" class="java">onUpgrade()函数可以实现数据库升级时的操作。
(2)对数据库中数据进行操作
使用SQLiteDatabase类的对象,可以对数据进行增删改查。
如:
<pre name="code" class="java">//创建数据库
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this, "stu_db",
null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase();//数据库设为可写权限
String name = insertNameEditText.getText().toString();
int age = Integer.parseInt(insertAgeEditText.getText().toString());
String sex = insertSexEditText.getText().toString();
ContentValues cValues = new ContentValues();
cValues.put("sname", name);
cValues.put("sage", age);
cValues.put("ssex", sex);
//执行插入数据语句
long flag = db.insert("stu_table", null, cValues);
if (flag == -1)
Toast.makeText(getApplicationContext(), "恭喜,插入数据失败!", Toast.LENGTH_LONG).show();
else
queryDataToListView();//刷新页面内容
Toast.makeText(getApplicationContext(), "恭喜,插入数据成功!", Toast.LENGTH_LONG).show();
db.close();
说明:
SQLiteDatabase对数据的操作有2种方法。
第一种,封装
ContentValues
:
|
ContentValues cv =
new
ContentValues();
//实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack Johnson");//添加用户名
cv.put(
"password"
,
"iLovePopMusic"
);
//添加密码
db.insert(
"user"
,
null
,cv);
//执行插入操作
|
第二种,
使用execSQL方式来实现:
|
<pre name="code" class="java"><table class=" " border="0" cellpadding="0" cellspacing="0" width="662" height="32"><tbody><tr><td class="code"> </td></tr></tbody></table>
(3)数据库查询
数据查询query有以下几种形式:
- db.rawQuery(String sql, String[] selectionArgs);
- db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
- db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
- db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
columns表示要查询的列所有名称集;selection表示WHERE之后的条件语句,当要查询字符串类型,可以使用占位符(?);selectionArgs就是占位符所指的实际参数集。
如:
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this, "stu_db",
null, 1);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("stu_table", new String[] "sname",
"sage", "ssex", "_id="+updateID, null, null, null,
null);
if (cursor.moveToFirst())
updateNameEditText.setText(cursor.getString(0));
updateAgeEditText.setText(cursor.getInt(1)+"");
updateSexEditText.setText(cursor.getString(2));
(4)游标Cursor
游标是数据集的意思,有点类似于JavaSE中的ResultSet,针对游标(Cursor)也提供了不少方法
方法名称 | 方法描述 |
---|---|
getCount() | 总记录条数 |
isFirst() | 判断是否第一条记录 |
isLast() | 判断是否最后一条记录 |
moveToFirst() | 移动到第一条记录 |
moveToLast() | 移动到最后一条记录 |
move(int offset) | 移动到指定的记录 |
moveToNext() | 移动到吓一条记录 |
moveToPrevious() | 移动到上一条记录 |
getColumnIndex(String columnName) | 获得指定列索引的int类型值 |
实现代码
|
以上例子的源码下载地址:
http://download.csdn.net/detail/xiyangyang8/9425200
参考文章:
http://blog.csdn.net/liuhe688/article/details/6715983/
http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html
http://www.jb51.net/article/62423.htm
以上是关于android SQLite数据库的使用介绍详解的主要内容,如果未能解决你的问题,请参考以下文章