Android SQLite详解及示例代码

Android SQLite详解及示例代码

什么是Android SQLite

SQLite是一个轻型的数据库库,它存储在设备的内部存储上,并提供了一些SQL接口用于读写数据。在Android开发中,SQLite是非常重要的一部分,它被广泛应用于Android应用的本地数据存储。

如何使用Android SQLite

1. 创建一个SQLite数据库

第一步是创建一个SQLite数据库。创建SQLite数据库的方法非常简单,只需继承SQLiteOpenHelper类并实现其中的onCreate()onUpgrade()方法即可。

public class MyDatabase extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "my_database.db";
    private static final int DATABASE_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS my_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS my_table");
        onCreate(db);
    }
}

onCreate()方法中,我们定义了一个名为my_table的表,并定义了三个字段:_idnameage。其中_id字段定义为自增主键,在每次插入新数据的时候会自动递增。

onUpgrade()方法中,我们实现了数据库的升级逻辑,当DATABASE_VERSION升级时,会被调用这个方法,我们可以在这里删除、修改或添加表和字段,以及进行其他的操作。

2. 插入数据

第二步是插入数据。在Android SQLite中插入数据非常简单,我们可以使用SQLiteDatabase中的insert()方法插入数据。

SQLiteDatabase db = myDatabase.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", "John");
cv.put("age", 25);
long rowId = db.insert("my_table", null, cv);
db.close();

在这个示例中,我们创建了一个ContentValues对象,用于存放要插入数据库的数据。然后调用insert()方法将数据插入到my_table表中。最后,我们需要关闭数据库连接,以避免内存泄漏。

3. 查询数据

第三步是查询数据。在Android SQLite中查询数据也非常简单,我们使用SQLiteDatabase中的rawQuery()方法查询数据。

SQLiteDatabase db = myDatabase.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM my_table", null);
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("_id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    Log.d("MyDatabase", "id: " + id + ", name: " + name + ", age: " + age);
}
cursor.close();
db.close();

在这个示例中,我们查询了my_table表中的所有数据,并使用Cursor对象遍历结果集。在每次循环中,我们获取了数据集中的三个字段:_idnameage,然后打印到了日志中。

示例说明

示例一:使用SQLite数据库存储用户信息

在这个示例中,我们使用SQLite数据库存储用户信息。当用户在应用中输入用户名和密码时,将数据插入到SQLite数据库中,在用户下次登录时,从SQLite数据库中查询用户信息以验证用户身份。

public class UserDatabase extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "user_database.db";
    private static final int DATABASE_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS user_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS user_table");
        onCreate(db);
    }

    public void addUser(String username, String password) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("username", username);
        cv.put("password", password);
        db.insert("user_table", null, cv);
        db.close();
    }

    public boolean verifyUser(String username, String password) {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM user_table WHERE username=? AND password=?", new String[]{username, password});
        int count = cursor.getCount();
        cursor.close();
        db.close();
        return count > 0;
    }
}

在这个示例中,我们定义了一个UserDatabase类,用于存储用户信息。在onCreate()方法中,我们定义了一个名为user_table的表,并定义了三个字段:_idusernamepassword。在addUser()方法中,我们使用insert()方法将用户信息插入到user_table表中。在verifyUser()方法中,我们使用rawQuery()方法从user_table表中查询用户名和密码是否匹配。如果匹配成功,则返回true,否则返回false

示例二:使用SQLite数据库存储任务清单

在这个示例中,我们使用SQLite数据库存储任务清单。用户可以在应用中添加、删除和修改任务,并在应用中查看任务列表。当用户退出应用后,任务清单数据将保存在SQLite数据库中,并在下次打开应用时加载。

public class TaskDatabase extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "task_database.db";
    private static final int DATABASE_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS task_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT, date TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS task_table");
        onCreate(db);
    }

    public void addTask(String name, String description, String date) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("description", description);
        cv.put("date", date);
        db.insert("task_table", null, cv);
        db.close();
    }

    public void deleteTask(int id) {
        SQLiteDatabase db = getWritableDatabase();
        db.delete("task_table", "_id=?", new String[]{String.valueOf(id)});
        db.close();
    }

    public void updateTask(int id, String name, String description, String date) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("description", description);
        cv.put("date", date);
        db.update("task_table", cv, "_id=?", new String[]{String.valueOf(id)});
        db.close();
    }

    public List<Task> getAllTasks() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM task_table", null);
        List<Task> tasks = new ArrayList<>();
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String description = cursor.getString(cursor.getColumnIndex("description"));
            String date = cursor.getString(cursor.getColumnIndex("date"));
            Task task = new Task(id, name, description, date);
            tasks.add(task);
        }
        cursor.close();
        db.close();
        return tasks;
    }
}

在这个示例中,我们定义了一个TaskDatabase类,用于存储任务清单信息。在onCreate()方法中,我们定义了一个名为task_table的表,并定义了四个字段:_idnamedescriptiondate。在addTask()方法中,我们使用insert()方法将任务信息插入到task_table表中。在deleteTask()方法中,我们使用delete()方法删除任务清单中的某一条任务。在updateTask()方法中,我们使用update()方法修改任务清单中的某一条任务。在getAllTasks()方法中,我们使用rawQuery()方法查询task_table表中的所有任务,并返回一个任务列表。在任务列表中,每个任务包括idnamedescriptiondate四个字段。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android SQLite详解及示例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现客房管理系统

    C语言实现客房管理系统的完整攻略包含以下几个步骤: 设计数据结构和功能模块 首先需要设计客房管理系统的数据结构和功能模块。根据系统需要,可以设计出以下数据结构: Room:客房信息,包括客房号、类型、价格、当前状态(已入住或未入住)等。 Order:订单信息,包括客房号、入住时间、退房时间、客人姓名等。 根据这些数据结构,可以设计出以下功能模块: Check…

    C 2023年5月23日
    00
  • Excel中A1样式和R1C1引用样式怎么用?

    当在Excel中输入公式时,我们可以使用A1样式或R1C1样式进行单元格引用。下面是完整的使用攻略: A1样式 A1样式是Excel中最常用的单元格引用样式,它使用列字母和行数字的组合来标识单元格。例如,”A1″是指第一列第一行的单元格,”B2″是指第二列第二行的单元格。以下是使用A1样式的示例: 示例1 假设我们要计算A1单元格和B1单元格之和,我们可以在…

    C 2023年5月23日
    00
  • C 语言常用方法技巧

    目录:1. 常用技巧概述2. 进制转换3. 字符串操作4. 数组操作5. 文件操作 1. 常用技巧概述 C 语言作为一门非常灵活的编程语言,程序员能够使用各种技巧和方法来提高代码的可读性和性能。这里列举几项常用的技巧: 使用宏定义来代替魔法数 尽可能使用 const 关键字来修饰常量 使用 static 关键字来限制变量的作用域 对于循环中需要多次调用的表达…

    C 2023年5月23日
    00
  • TIOBE编程语言排行榜前20的语言入门书籍推荐

    TIOBE编程语言排行榜前20的语言入门书籍推荐攻略 TIOBE编程语言排行榜是一个广受欢迎的编程语言排名网站,每月发布最新的排行榜,展示当月最受欢迎的编程语言。本攻略将会介绍排行榜前20的编程语言,并针对每种编程语言推荐一本入门书籍。 1. Java Java是一个广泛应用的编程语言,每年都会有大量的Java招聘。入门者可以从下列书籍开始学习Java: 《…

    C 2023年5月23日
    00
  • C语言实现直方图均衡化

    下面是“C语言实现直方图均衡化”的完整攻略: 1.什么是直方图均衡化? 直方图均衡化是一种针对图像处理和计算机视觉中的技术,其主要目的是提高图像对比度和亮度的可读性。它的基本思想是使像素值分布更加均匀,从而达到增强图像对比度和亮度的效果。 2.实现步骤 计算图像的直方图。 直方图是指图像中每个像素值出现的次数。首先需要将图像转换为灰度图像,然后统计每个像素值…

    C 2023年5月23日
    00
  • C语言中如何进行代码保护?

    在C语言中,代码保护是指采取一系列措施,防止不合法的访问和修改程序,以提高程序的安全性和可靠性。下面是C语言中进行代码保护的一些常用方法: 1.使用共享库 将程序中一些常见的函数封装成共享库,能够有效地避免代码被恶意篡改的问题,同时还可以使程序占用更少的内存空间。在Linux下,使用共享库非常方便,只需要将程序中用到的函数的原型声明在头文件中,然后将共享库链…

    C 2023年4月27日
    00
  • win11错误代码0xC004F074无法激活修复的解决办法

    Win11错误代码0xC004F074无法激活修复的解决办法 如果在Win11安装或更新后出现错误代码0xC004F074无法激活的情况,你可以按照以下的步骤来解决。 步骤一:使用管理员权限打开命令提示符 在“开始”菜单中右键单击“命令提示符”(或“快速访问菜单”中的“命令提示符”),然后选择“以管理员身份运行”。 如果你看到一个用户控制弹窗,请选择“是”来…

    C 2023年5月24日
    00
  • Golang 如何解析和生成json

    下面是关于 “Golang 如何解析和生成json” 的完整攻略。 什么是json 首先,我们需要了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript语法,可以被多种编程语言所支持。在Golang中,需要使用标准库中的encoding/json包来解析和生成JSON格式的数…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部