热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Android中的SQLite数据库使用

本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。

SQLite是一个轻量级的关系型数据库管理系统,被广泛应用于移动应用开发中,特别是在Android平台。SQLite数据库允许开发者直接在设备上存储和访问数据,无需网络连接。

在Android中使用SQLite数据库时,通常需要创建一个自定义的类来继承SQLiteOpenHelper,以便于管理和操作数据库。以下是一个简单的示例,展示了如何创建一个数据库以及相关的增删改查操作。

首先,我们需要创建一个自定义的帮助类,该类将负责数据库的创建和升级:

```java
public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "students.db";
private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_STUDENTS = "CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT,
gender TEXT,
age INTEGER)";
db.execSQL(CREATE_TABLE_STUDENTS);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS students");
// Create tables again
onCreate(db);
}
}
```
在这个例子中,我们定义了一个名为`DatabaseHelper`的类,它继承自`SQLiteOpenHelper`。构造函数中指定了数据库的名称(students.db)和版本号。`onCreate`方法用于首次创建数据库时执行,而`onUpgrade`方法则用于当数据库版本发生变化时执行,通常是删除旧表并重新创建。

接下来,我们可以定义一个`Student`类来表示学生实体,以及一个`StudentDAO`类来封装所有与学生数据相关的操作:

```java
public class Student {
private int id;
private String name;
private String gender;
private int age;

// 构造器、getter和setter省略
}
```
```java
public class StudentDAO {
private DatabaseHelper dbHelper;

public StudentDAO(Context context) {
dbHelper = new DatabaseHelper(context);
}

public long insertStudent(Student student) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", student.getName());
values.put("gender", student.getGender());
values.put("age", student.getAge());
return db.insert("students", null, values);
}

public int deleteStudent(long id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
return db.delete("students", "id=?", new String[]{String.valueOf(id)});
}

public int updateStudent(Student student) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", student.getName());
values.put("gender", student.getGender());
values.put("age", student.getAge());
return db.update("students", values, "id=?", new String[]{String.valueOf(student.getId())});
}

public List getAllStudents() {
List studentList = new ArrayList<>();
String selectQuery = "SELECT * FROM students";
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Student student = new Student();
student.setId(cursor.getInt(0));
student.setName(cursor.getString(1));
student.setGender(cursor.getString(2));
student.setAge(cursor.getInt(3));
studentList.add(student);
} while (cursor.moveToNext());
}
cursor.close();
return studentList;
}
}
```
以上代码中,`StudentDAO`类提供了插入、删除、更新和查询学生记录的方法。每个方法都使用了`SQLiteDatabase`对象来执行相应的SQL语句。

最后,在主活动中,我们可以实例化`StudentDAO`对象,并调用其提供的方法来操作数据库:

```java
public class MainActivity extends AppCompatActivity {
private StudentDAO studentDAO;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

studentDAO = new StudentDAO(this);

// 示例:添加一条学生记录
Student student = new Student();
student.setName("张三");
student.setGender("男");
student.setAge(20);
studentDAO.insertStudent(student);
}

// 其他按钮点击事件可以类似地处理
}
```
通过上述步骤,我们可以在Android应用中有效地使用SQLite数据库来存储和管理数据。希望本文能够帮助您更好地理解和应用SQLite数据库技术。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
author-avatar
qiuyaji4379
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有