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日

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    以下是详细讲解“源码分析系列之json_encode()如何转化一个对象”的完整攻略。 1. 前言 在PHP中,json_encode()函数可以将数组、对象等类型的数据转化为JSON格式的字符串,开发者在进行Web应用程序开发时经常会用到它。 本文将从源码的角度,分析json_encode()函数是如何将PHP对象转化为JSON格式的字符串的。 2. 基础…

    C 2023年5月23日
    00
  • C++编译/编辑器对OIer的必要功能(推荐)

    C++编译/编辑器对OIer的必要功能(推荐) C++编译/编辑器是开发者进行编程时必要的工具,对于OIer而言,这些工具是必不可少的辅助设备。以下是编译/编辑器应该具备的必要功能以及一些推荐的C++编译/编辑器。 必要功能 代码高亮 —— 代码高亮可以使得代码更加美观易读,同时也方便调试。有些编辑器支持自定义语法高亮。 代码补全 —— 代码补全可以自动完成…

    C 2023年5月23日
    00
  • C语言实现矩阵运算案例详解

    C语言实现矩阵运算案例详解 简介 矩阵是线性代数中非常重要的概念,也是很多领域中经常用到的数学工具。在计算机科学中,矩阵也得到了广泛的应用。在这篇文章中,我们将介绍如何使用C语言实现矩阵的基本运算,包括相加、相乘、转置、求逆等操作。我们将使用标准C语言来实现这些操作,不需要任何额外的库。 矩阵的基本操作 矩阵的表示 在讨论矩阵的操作之前,我们需要先了解矩阵的…

    C 2023年5月23日
    00
  • C++深入探究类与对象之友元与运算符重载

    C++深入探究类与对象之友元与运算符重载 友元(friend)是 C++ 中比较特殊的概念,它可以使一个类中的非成员函数访问类的私有成员,非常适合于一些特殊的应用场景。本文将深入讲解 C++ 中友元的使用方法并结合示例进行说明。 友元的概念 在 C++ 中,我们可以使用关键字 friend 定义友元,其作用是允许其他类或者函数访问该类的私有成员。简而言之,友…

    C 2023年5月22日
    00
  • Python列表嵌套常见坑点及解决方案

    下面就是对“Python列表嵌套常见坑点及解决方案”的详细讲解。 1. 什么是Python列表嵌套? Python中的列表是一种可以存储多个元素的数据结构,而列表嵌套则是指把一个或多个列表作为元素存储在另一个列表中。例如,以下是一个简单的列表嵌套的示例: nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 以上示例…

    C 2023年5月22日
    00
  • C语言代码中调用C++代码的方法示例

    当我们在C语言中需要使用一些C++代码的时候,可以通过以下几个步骤实现: 编写C++代码 在C++中编写我们需要使用的函数或者类,注意要在代码中添加extern “C”修饰,使C++代码能够被C语言调用。例如,我们编写一个简单的C++函数: #include<iostream> using namespace std; extern "…

    C 2023年5月23日
    00
  • C语言结构体大小分析

    title: C语言结构体大小分析 author: saopigqwq233 date: 2022-04-05 C语言结构体大小分析 一,基本类型 C语言自带的数据类型大小如下 数据类型 大小(字节) char 1 short 2 int 4 long 4或8 float 4 double 8 long double 16 二,自定义类型—struct …

    C语言 2023年4月17日
    00
  • C语言基础 原码、反码、补码和移码详解

    C语言基础 原码、反码、补码和移码详解 在计算机领域,数据一般使用二进制表示,而原码、反码、补码和移码就是将数据转换为二进制表示时的一些规则和方法。 什么是原码? 原码就是一个数的二进制表示,符号位为数据的最高位,0表示正数,1表示负数。例如,-5 的原码就是: 10000101 什么是反码? 反码就是将一个数的原码取反得到的二进制表示。对于正数,其反码就是…

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