SQLite学习笔记(七)

本文详细介绍了在Android中使用SQLite数据库的过程,包括SQLiteOpenHelper的onCreate和onUpgrade方法,以及如何通过SQLiteDatabase进行数据的插入、更新、删除和查询操作。此外,还讨论了如何开启事务以及SQLite数据库的其他注意事项,如表字段的删除和优化操作。
摘要由CSDN通过智能技术生成

概述

本篇文章的主题是讲述在 Android 中应用 SQLite 的实例,结构如下所示:

  • SQLiteOpenHelper 的应用
  • SQLiteDatabase 的 CRUD 操作
  • 开启事务
  • SQLite 的其他注意事项

一、SQLiteOpenHelper

在 Android 中使用 SQLite 的时候需要借助一个类:SQLiteOpenHelper,这是一个抽象类,继承这个抽象类的时候,我们必须实现以下2个方法:

/**
 * 创建数据库的时候回调的方法
 * @param db 数据库对象
 */
public abstract void onCreate(SQLiteDatabase db);

/**
 * 数据库版本更新时回调的方法
 * @param db 数据库对象
 * @param oldVersion 数据库的旧版本
 * @param newVersion 数据库的新版本
 */
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

所以我们可以提供一个子类来继承 SQLiteOpenHelper,如下所示:

public class MySQLiteHelper extends SQLiteOpenHelper {
   

    private static final String TAG = "MySQLiteHelper";

    /**
     * @param context 上下文对象
     * @param name 数据库名称
     * @param factory 游标工厂
     * @param version 数据库版本,大于等于1
     */
    protected MySQLiteHelper(@Nullable Context context, @Nullable String name,
                          @Nullable SQLiteDatabase.CursorFactory factory, int version) {
   
        super(context, name, factory, version);
    }

    /**
     * 数据库创建时回调的方法
     * @param db 数据库对象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
   
        Log.d(TAG, "-------------onCreate------------");
    }

    /**
     * 数据库版本更新时回调的方法
     * @param db 数据库对象
     * @param oldVersion 数据库的旧版本
     * @param newVersion 数据库的新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   
        Log.d(TAG, "-------------onUpgrade------------");
    }

    /**
     * 数据库打开时回调的方法
     * @param db 数据库对象
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
   
        super.onOpen(db);
        Log.d(TAG, "-------------onOpen------------");
    }

}

在这里我们还需要定义它的构造方法,构造方法中的参数如下所示:

  • context :上下文对象。
  • name:数据库名称。
  • factory:游标工厂,一般我们使用不到这个参数,直接传 null 即可。
  • version:数据库的版本,传入的数必须是一个大于等于 1 的数。

除了 onCreateonUpgrade 这两个抽象方法之外,有时候我们也会重写 onOpen 方法,这个方法会在数据库打开的时候回调,为了了解这些方法的回调时机,我们通过 Log 来确定,接着在 MainActivity 中我们创建 MySQLiteHelper 对象并创建一个数据库对象,然后观察日志输出:

public class MainActivity extends AppCompatActivity {
   

    private MySQLiteHelper helper;

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

    private void createDatabase() {
   
        helper = new MySQLiteHelper(this, "default.db", null, 1);
        SQLiteDatabase db = helper.getWritableDatabase();
    }
}

MainActivity 所做的事很简单,创建了一个 MySQLiteHelper 对象,然后通过 getWritableDatabase 方法获取数据库对象,接着我们运行该工程,查看 Log 日志:

D/MySQLiteHelper: -------------onCreate------------
D/MySQLiteHelper: -------------onOpen------------

可以看到 onCreateonOpen 方法被回调了。此时我们的存储空间中就会存在一个叫做 default.db 的数据库,default.db 只会创建一次,所以当我们下次再打开时,onCreate 方法不再被回调,只会回调 onOpen 方法。

1. onCreate

前面说到 onCreate 方法会在数据库创建的时候进行回调,而数据库中存储和管理数据我们需要创建表、视图、索引等,所以在 onCreate 中创建表等是再适宜不过的了。如下所示:

假设要创建一张 Contacts 表用于存放联系人信息,它的 SQL 语句如下所示:

CREATE TABLE Contacts (
	id integer PRIMARY KEY,
	name tex
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值