【Anroid进阶】SQLite数据库使用完全详解
来源:互联网 发布:软件编程就业前景 编辑:程序博客网 时间:2024/06/14 18:08
本文转载于:点击打开链接
在Android开发中,我们一般可以使用文件、sharedpreferences、以及数据库来保存我们程序运行中产生的数据,本篇主要讲解如何使用SQLite数据库,完成数据的增删改查的一般操作
SQLite介绍
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。
SQLite 和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。
此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。
除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器等等。
SQLite数据库的创建
我们如果想在手机上使用数据库保存我们的应用信息,那么我们必须在使用之前,创建好数据库。Android的API给我们提供了SQLiteOpenHelper这个类,完成对数据库的初次创建,以及当软件升级造成的数据库版本更新时需要做的处理。我们必须自定义一个类,继承自SQLiteOpenHelper,并且实现它的三个方法,代码如下
- /**
- * 数据库创建类
- *
- * @author ZhaoKaiQiang
- * @time 2014年6月4日
- */
- public class MyDbOpenHelper extends SQLiteOpenHelper {
- // 数据库的名称
- private static final String DATEBASE_NAME = "student.db";
- // 数据库的版本
- private static final int DATEBASE_VERSION = 1;
- // 必须定义一个构造函数,并且调用父类的构造函数
- public MyDbOpenHelper(Context context) {
- super(context, DATEBASE_NAME, null, DATEBASE_VERSION);
- }
- // 当数据库被第一次使用的时候,系统会判断是否已经创建数据库。若还未创建数据库,则运行下面的SQL语句完成数据库的创建
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE student(id integer primary key autoincrement,name vchar(20),age integer,school vchar(50))");
- }
- // 当数据库的版本发生变化的时候,系统会自动调用这个方法,我们可以在这里完成数据库的更新等操作
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- }
- }
在我们完成了这个继承自SQLiteOpenHelper的类之后,我们一般会再创建一个专门的类,用于数据库的增删改查等操作。在这里,我们以student表为例,讲解如何实现对student表的增删改查的操作
首先看一下我们的student实体类
- /**
- * 学生实体类
- * @author ZhaoKaiQiang
- * @time 2014年6月4日
- */
- public class Student implements Serializable {
- private static final long serialVersionUID = -4885878468381093121L;
- private int id;
- private String name;
- private int age;
- private String school;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSchool() {
- return school;
- }
- public void setSchool(String school) {
- this.school = school;
- }
- public Student(int id, String name, int age, String school) {
- super();
- this.id = id;
- this.name = name;
- this.age = age;
- this.school = school;
- }
- public Student() {
- super();
- }
- @Override
- public String toString() {
- return "--id = " + id + " --name = " + name + "--age = " + age + "--school = " + school;
- }
- }
首先看我们的添加数据的方法
- // 添加数据
- public void add(String name, int age, String school) {
- SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
- database.execSQL("insert into student(name,age,school) values(?,?,?)", new Object[] { name, age, school });
- }
在添加方法中,我们使用占位符,将我们需要添加的数据添加到我们的数据库中。
我们可以使用单元测试完成添加方法的测试,下面是单元测试的方法
- //测试数据添加
- public void testAdd() throws Exception {
- StudentDbHelper dbHelper = new StudentDbHelper(getContext());
- dbHelper.add("zhao", 19, "QUST");
- dbHelper.add("kai", 18, "青大");
- dbHelper.add("qiang", 17, "清华");
- dbHelper.add("da", 16, "青农");
- dbHelper.add("huai", 15, "青医");
- dbHelper.add("dan", 14, "青岛");
- }
在单元测试运行完毕之后,没有错误信息,这说明我们添加数据成功了。
在我们完成添加数据之前,系统会自动在/data/data/<package name>/database/目录下面创建名为"student.db"的数据库,如下图所示
当有这个文件存在,就说明我们已经完成了数据库的创建以及数据的添加等工作。
那么如何查看数据库里面的信息呢?
我们可以使用SQLite developer这个软件完成SQLite数据库的查看。
首先我们将我们的数据库文件导出到我们的桌面,然后使用这个软件将数据库文件导入进去
导入成功之后,我们就可以看到我们创建的表结构,以及我们插入的数据了
这里是我们成功添加的数据
到这里,我们对数据的添加工作就完成了。
其他删改查的方法类似。
下面是删除方法
- // 删除数据
- public void delete(int id) {
- SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
- database.execSQL("delete from student where id=?", new Object[] { id });
- }
进行单元测试
- //删除方法测试
- public void testDelete() throws Exception {
- StudentDbHelper dbHelper = new StudentDbHelper(getContext());
- dbHelper.delete(3);
- }
结果图
修改方法
- // 修改
- public void update(Student student) {
- SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
- database.execSQL("update student set name=?,age=?,school=? where id=?", new Object[] { student.getName(), student.getAge(), student.getSchool(), student.getId() });
- }
单元测试
- // 修改方法测试
- public void testUpdate() throws Exception {
- StudentDbHelper dbHelper = new StudentDbHelper(getContext());
- Student student = new Student(1, "修改", 10, "家里蹲");
- dbHelper.update(student);
- }
查询方法
- // 查询
- public Student find(int id) {
- SQLiteDatabase database = dbOpenHelper.getReadableDatabase();
- // 获取查询结果的游标
- Cursor cursor = database.rawQuery("select * from student where id=?", new String[] { id + "" });
- // 利用游标获取对应的值
- if (cursor.moveToFirst()) {
- Student student = new Student();
- student.setId(cursor.getInt(cursor.getColumnIndex("id")));
- student.setAge(cursor.getInt(cursor.getColumnIndex("age")));
- student.setName(cursor.getString(cursor.getColumnIndex("name")));
- student.setSchool(cursor.getString(cursor.getColumnIndex("school")));
- return student;
- }
- return null;
- }
单元测试
- //查找方法测试
- public void testFind() throws Exception {
- StudentDbHelper dbHelper = new StudentDbHelper(getContext());
- Student student = dbHelper.find(1);
- Log.d(TAG, student.toString());
- }
结果
至此,SQLIte数据库的简单的增删改查操作就介绍到这里了,如果有疑问,还请留言交流!
0 0
- 【Anroid进阶】SQLite数据库使用完全详解
- "Anroid SQLite"数据库语句汇总
- anroid sqlite数据库操作框架
- SQLite数据库使用详解
- Android数据库SQLite的使用详解(SQLiteOpenHelper,SQLiteDataBase)【看后面简约进阶版】
- C#使用SQLite数据库详解
- C#使用SQLite数据库详解
- C#使用SQLite数据库详解
- Android 使用SQLite数据库详解
- android sqlite 数据库使用 详解
- Android数据库进阶之Sqlite索引的使用
- Anroid——数据库SQLite——SQLiteOpenHelper+SQLiteDatabase
- iPhone应用开发 SQLite数据库使用详解
- Android中使用SQLite数据库详解
- android SQLite数据库的使用介绍详解
- SQLite数据库的使用详解2
- Android数据库Sqlite完全解析
- Anroid HandlerThread 完全解析
- ACM中的Apache与Tomcat集成配置
- (4.2.3)【android开源工具】Android快速开发系列 10个常用工具类
- LeetCode Single Number, Single Number II
- 客户端调用Xfire WebService(含JavaScript)
- 动态setImageResource后setPadding无效不起作用的处理办法
- 【Anroid进阶】SQLite数据库使用完全详解
- xUtils框架
- mysql命令行修改字符编码
- 深入理解Fragment(二)
- 图标,可以在<application>或者<activity>中通过logo
- 解决Maven报Plugin execution not covered by lifecycle configuration
- (4.2.4)【android开源组件】Android 省市县 三级联动(android-wheel的使用)
- android stuido 安装时出现的错误
- [android开发实例]通过Http协议下载图片简易版