Android编程之数据库的创建方法详解

Android编程之数据库的创建方法详解

一、数据库基础知识

1. 什么是数据库?

数据库(Database),是指在一定组织结构下,存储在一起的、可共享的大量数据的集合。通俗地说,就是把大量数据以某种方式结构化存储下来,方便我们进行数据的存取、管理、处理等操作。

2. 为什么要使用数据库?

数据库的优点主要有以下几点:

  • 数据库可以方便地存储和管理大量的数据;
  • 数据库可以实现数据的共享和共同使用;
  • 数据库可以为数据提供高效的检索、排序、过滤和统计等功能;
  • 数据库可以确保数据的安全性和完整性。

3. 常见的数据库类型

目前常用的关系型数据库有 MySQL、Oracle、SQLite、SQLServer 等。其中,SQLite 是一种轻量级的关系型数据库,是移动端开发中最常用的数据库类型之一。在 Android 中也内置了 SQLite 数据库。

二、SQLite 数据库的创建和使用

下面,我们以 Android Studio 为例,演示如何创建和使用 SQLite 数据库。

1. 创建数据库和数据表

在 Android 中,我们可以通过 SQLiteOpenHelper 类来创建和管理 SQLite 数据库。SQLiteOpenHelper 是 Android 提供的一个抽象类,在使用时需要我们继承该类,并实现其抽象方法。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "my_db"; // 数据库名称
    private static final int DATABASE_VERSION = 1; // 数据库版本号

    public static final String TABLE_NAME = "user"; // 数据表名称
    public static final String COLUMN_ID = "id"; // id 列
    public static final String COLUMN_NAME = "name"; // name 列
    public static final String COLUMN_AGE = "age"; // age 列

    private static final String SQL_CREATE_TABLE =
            "create table " + TABLE_NAME + " ( " +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_NAME + " text, " +
                    COLUMN_AGE + " integer)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_TABLE); // 创建数据表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_NAME); // 删除数据表
        onCreate(db); // 重新创建数据表
    }
}

上面的代码演示了如何创建一个名为 my_db 的数据库,并在其中创建一个名为 user 的数据表,该表包含 id、name、age 三个列。

2. 插入数据

创建完数据库和数据表之后,我们需要往数据表中插入一些数据。下面的代码演示了如何往 user 表中插入一条数据:

MyDatabaseHelper db_helper = new MyDatabaseHelper(this);
SQLiteDatabase db = db_helper.getWritableDatabase(); // 获取可写的数据库实例

ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COLUMN_NAME, "张三");
values.put(MyDatabaseHelper.COLUMN_AGE, 20);

long id = db.insert(MyDatabaseHelper.TABLE_NAME, null, values); // 插入数据

db.close(); // 关闭数据库

3. 查询数据

插入数据之后,我们需要查询数据,下面的代码演示了如何查询 user 表中的所有数据:

MyDatabaseHelper db_helper = new MyDatabaseHelper(this);
SQLiteDatabase db = db_helper.getReadableDatabase(); // 获取只读的数据库实例

Cursor cursor = db.query(MyDatabaseHelper.TABLE_NAME, null, null, null, null, null, null);
// 查询数据

if (cursor.moveToFirst()) {
    do {
        int id = cursor.getInt(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_ID));
        String name = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_NAME));
        int age = cursor.getInt(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_AGE));
        Log.d("test", "id=" + id + ", name=" + name + ", age=" + age);
    } while (cursor.moveToNext());
}

cursor.close(); // 关闭游标
db.close(); // 关闭数据库

三、示例代码

下面给出两个使用 SQLite 数据库的示例:

示例一:创建一个简单的便签应用

这个示例是一个简单的便签应用,可以让用户创建、编辑和删除便签。每个便签包含一个标题和一个正文。便签数据存储在 SQLite 数据库中。

关键代码:

public class NoteDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "note.db";
    private static final int DATABASE_VERSION = 1;
    public static final String TABLE_NAME = "note";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_TITLE = "title";
    public static final String COLUMN_CONTENT = "content";

    private static final String SQL_CREATE_TABLE =
            "create table " + TABLE_NAME + " ( " +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_TITLE + " text, " +
                    COLUMN_CONTENT + " text)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_NAME);
        onCreate(db);
    }
}

public class NoteActivity extends AppCompatActivity {

    private NoteDatabaseHelper mDbHelper;

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

        mDbHelper = new NoteDatabaseHelper(this);

        // 点击“保存”按钮时,将当前便签数据保存到数据库中
        Button btnSave = (Button) findViewById(R.id.btn_save);
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = mDbHelper.getWritableDatabase();

                String title = ((EditText) findViewById(R.id.et_title)).getText().toString();
                String content = ((EditText) findViewById(R.id.et_content)).getText().toString();

                ContentValues values = new ContentValues();
                values.put(NoteDatabaseHelper.COLUMN_TITLE, title);
                values.put(NoteDatabaseHelper.COLUMN_CONTENT, content);

                if (getIntent().hasExtra("note_id")) { // 如果是编辑模式
                    int noteId = getIntent().getIntExtra("note_id", -1);
                    db.update(NoteDatabaseHelper.TABLE_NAME, values,
                            NoteDatabaseHelper.COLUMN_ID + "=" + noteId, null);
                } else { // 如果是新建模式
                    db.insert(NoteDatabaseHelper.TABLE_NAME, null, values);
                }

                db.close();

                setResult(RESULT_OK);
                finish();
            }
        });

        // 如果是编辑模式,将当前便签数据显示在界面中
        if (getIntent().hasExtra("note_id")) {
            int noteId = getIntent().getIntExtra("note_id", -1);
            SQLiteDatabase db = mDbHelper.getReadableDatabase();

            Cursor cursor = db.query(NoteDatabaseHelper.TABLE_NAME, null,
                    NoteDatabaseHelper.COLUMN_ID + "=" + noteId,
                    null, null, null, null);

            if (cursor.moveToFirst()) {
                String title = cursor.getString(cursor.getColumnIndex(NoteDatabaseHelper.COLUMN_TITLE));
                String content = cursor.getString(cursor.getColumnIndex(NoteDatabaseHelper.COLUMN_CONTENT));

                EditText etTitle = (EditText) findViewById(R.id.et_title);
                EditText etContent = (EditText) findViewById(R.id.et_content);
                etTitle.setText(title);
                etContent.setText(content);
            }

            cursor.close();
            db.close();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mDbHelper.close();
    }
}

示例二:创建一个简单的备忘录应用

这个示例是一个简单的备忘录应用,可以让用户创建、编辑和删除备忘录。每个备忘录包含一个标题、正文和一个时间戳。备忘录数据存储在 SQLite 数据库中。

关键代码:

public class MemoDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "memo.db";
    private static final int DATABASE_VERSION = 1;
    public static final String TABLE_NAME = "memo";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_TITLE = "title";
    public static final String COLUMN_CONTENT = "content";
    public static final String COLUMN_TIMESTAMP = "timestamp";

    private static final String SQL_CREATE_TABLE =
            "create table " + TABLE_NAME + " ( " +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_TITLE + " text, " +
                    COLUMN_CONTENT + " text, " +
                    COLUMN_TIMESTAMP + " integer)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_NAME);
        onCreate(db);
    }
}

public class MemoActivity extends AppCompatActivity {

    private MemoDatabaseHelper mDbHelper;

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

        mDbHelper = new MemoDatabaseHelper(this);

        // 点击“保存”按钮时,将当前备忘录数据保存到数据库中
        Button btnSave = (Button) findViewById(R.id.btn_save);
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = mDbHelper.getWritableDatabase();

                String title = ((EditText) findViewById(R.id.et_title)).getText().toString();
                String content = ((EditText) findViewById(R.id.et_content)).getText().toString();
                long timestamp = System.currentTimeMillis();

                ContentValues values = new ContentValues();
                values.put(MemoDatabaseHelper.COLUMN_TITLE, title);
                values.put(MemoDatabaseHelper.COLUMN_CONTENT, content);
                values.put(MemoDatabaseHelper.COLUMN_TIMESTAMP, timestamp);

                if (getIntent().hasExtra("memo_id")) { // 如果是编辑模式
                    int memoId = getIntent().getIntExtra("memo_id", -1);
                    db.update(MemoDatabaseHelper.TABLE_NAME, values,
                            MemoDatabaseHelper.COLUMN_ID + "=" + memoId, null);
                } else { // 如果是新建模式
                    db.insert(MemoDatabaseHelper.TABLE_NAME, null, values);
                }

                db.close();

                setResult(RESULT_OK);
                finish();
            }
        });

        // 显示所有备忘录列表
        ListView listView = (ListView) findViewById(R.id.list_view_memo);
        SQLiteDatabase db = mDbHelper.getReadableDatabase();

        Cursor cursor = db.query(MemoDatabaseHelper.TABLE_NAME, null, null, null,
                null, null, MemoDatabaseHelper.COLUMN_TIMESTAMP + " desc"); // 按时间戳排序

        MemoCursorAdapter adapter = new MemoCursorAdapter(this, cursor);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MemoActivity.this, MemoActivity.class);
                intent.putExtra("memo_id", (int) id); // 传递备忘录的 id
                startActivityForResult(intent, 1);
            }
        });

        cursor.close();
        db.close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mDbHelper.close();
    }
}

public class MemoCursorAdapter extends CursorAdapter {

    public MemoCursorAdapter(Context context, Cursor cursor) {
        super(context, cursor);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.item_memo, parent, false);
        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
        TextView tvContent = (TextView) view.findViewById(R.id.tv_content);
        TextView tvTimestamp = (TextView) view.findViewById(R.id.tv_timestamp);

        String title = cursor.getString(cursor.getColumnIndex(MemoDatabaseHelper.COLUMN_TITLE));
        String content = cursor.getString(cursor.getColumnIndex(MemoDatabaseHelper.COLUMN_CONTENT));
        long timestamp = cursor.getLong(cursor.getColumnIndex(MemoDatabaseHelper.COLUMN_TIMESTAMP));

        tvTitle.setText(title);
        tvContent.setText(content);
        tvTimestamp.setText(TimeUtils.formatTime(timestamp));
    }
}

四、总结

本文介绍了 SQLite 数据库的创建和使用方法,包括创建数据库和数据表、插入数据、查询数据等操作。同时,还给出了两个使用 SQLite 数据库的示例,分别是创建一个简单的便签应用和创建一个简单的备忘录应用。.SQLite 数据库是 Android 开发中非常重要的一部分,掌握 SQLite 数据库的使用方法对于提高 Android 应用的开发效率和质量具有重要意义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android编程之数据库的创建方法详解 - Python技术站

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

相关文章

  • Java实现获取前、后N天日期的函数分享

    标题 Java实现获取前、后N天日期的函数分享 介绍 在 Java 中,我们可以通过编写函数,来获取前或后 N 天的日期。本攻略将介绍如何实现该功能。 步骤 1.通过 Java 中的 Calendar 类获取当前日期。 Calendar calendar = Calendar.getInstance(); Date now = calendar.getTim…

    Java 2023年5月20日
    00
  • 搭建MyBatis-Plus框架并进行数据库增删改查功能

    搭建MyBatis-Plus框架并进行数据库增删改查功能的完整攻略如下: 准备工作 下载和安装JDK和MySQL; 创建一个Spring Boot项目; 在项目中添加mybatis-plus-boot-starter依赖; 在项目的配置文件中配置数据库连接信息。 配置MyBatis-Plus框架 创建数据库表; 创建实体类,并在类上添加@TableField…

    Java 2023年6月1日
    00
  • Struts2的配置文件方法小结

    一、概述 Struts2是一个基于MVC设计模式,用于Web应用程序开发的框架。它的配置非常重要,一个良好的配置可以提高应用程序的性能,降低开发成本。本文将对Struts2的配置方法进行小结。 二、Struts2的配置文件 在Struts2中,主要有以下几个配置文件: struts.xml 主要负责定义Action与我们的JSP页面之间实际的数据流动以及每一…

    Java 2023年5月20日
    00
  • 使用JPA进行CriteriaQuery进行查询的注意事项

    使用JPA进行CriteriaQuery进行查询时,需要注意以下几个方面: 1. 配置persistence.xml 首先,需要在persistence.xml文件中配置JPA的provider和数据库连接信息。在provider中需要指定使用Hibernate等JPA实现,以及指定JPA的版本。例如: <persistence-unit name=&…

    Java 2023年5月20日
    00
  • java Timer 定时每天凌晨1点执行任务

    Java Timer是Java中的一个计时器工具,可以用来在特定时间间隔内执行指定任务。下面是Java Timer实现每天凌晨1点执行任务的攻略: 步骤一:创建Timer对象 在Java中,我们需要使用java.util.Timer类来创建一个计时器对象。首先,需要导入java.util.Timer和java.util.TimerTask这两个包。 impo…

    Java 2023年5月20日
    00
  • java实现字符串反转案例

    首先,在Java中,String类是不可变的,意味着反转字符串不会改变原字符串,而是产生一个新的字符串。下面是反转字符串的步骤: 1.将字符串转换成字符数组。2.使用双指针方法交换字符数组中的字符顺序。3.将字符数组转换回字符串。 以下是完整的Java代码示例: public class StringReverseExample { public stati…

    Java 2023年5月26日
    00
  • 简单了解java类的初始化以及类的实例化

    简单了解Java类的初始化以及类的实例化 Java类的初始化 在Java中,类的初始化是指在类的第一次被使用时,JVM对其进行的一系列步骤。当JVM加载一个类时,它首先会进行初始化,这个过程包括以下几部分: 分配静态变量存储空间并初始化静态变量,如果静态变量有初始值,那么直接使用该值进行初始化;否则使用默认值进行初始化,例如整型会被初始化为0,布尔型会被初始…

    Java 2023年5月26日
    00
  • 用Eclipse连接MySQL数据库的步骤

    下面来详细讲解用 Eclipse 连接 MySQL 数据库的步骤。整个过程可以分为以下几个步骤: 准备工作 在进行数据库连接之前,需要进行一些准备工作: 下载和安装 MySQL 数据库。在安装过程中,请记住设置好 root 用户的密码,因为连接数据库需要使用 root 用户名和密码。 下载和安装 JavaSE 开发环境,并安装 Eclipse IDE。 下载…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部