You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQLite数据库创建时机咨询?关于super语句的疑问

关于SQLite数据库创建时机与super语句的疑问解答

嘿,我来帮你逐个理清这两个问题:

一、数据库何时创建?

你的AdminSQLiteOpenHelper本身只是一个数据库辅助管理类,数据库并不会在你实例化这个类的时候直接创建。真正的创建触发时机是当你调用SQLiteOpenHelpergetReadableDatabase()或者getWritableDatabase()方法时:

  • 如果指定名称的数据库文件在设备的/data/data/你的应用包名/databases/目录下不存在,系统会自动创建对应的数据库文件
  • 紧接着会调用你重写的onCreate()方法,执行里面的建表SQL语句,完成用户表的创建
  • 如果数据库已经存在,就不会再触发onCreate(),而是直接打开现有数据库供你操作

举个简单的调用场景例子:

// 在Activity或其他有上下文的环境中
AdminSQLiteOpenHelper dbHelper = new AdminSQLiteOpenHelper(this, "miBaseDatos", null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase(); // 这一步才会触发数据库创建(如果不存在的话)

二、super语句的作用

你构造方法里的super(context, nombre, factory, version)调用父类SQLiteOpenHelper的构造方法,它是整个数据库管理逻辑的基础初始化步骤,每个参数的作用如下:

  • context:提供应用上下文,用于系统定位数据库文件的存储路径
  • nombre:你要创建的数据库的文件名(比如上面例子里的"miBaseDatos")
  • factory:游标工厂,用于自定义Cursor的创建逻辑,一般传null使用系统默认的Cursor实现即可
  • version:数据库的版本号,后续如果需要修改表结构,只需提升这个版本号,系统就会触发onUpgrade()方法(你的代码目前还没重写这个方法,有需要可以补充)

这个父类构造方法帮你处理了数据库文件的创建、打开、版本管理等底层逻辑,你只需要专注于表结构定义(onCreate())和数据库升级逻辑(onUpgrade())就可以啦。

附上你提供代码的格式化版本:

package es.aadesigners.pruebabd;

/**
 * Created by Andrea on 29/2/16.
 */
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {

    public AdminSQLiteOpenHelper(Context context, String nombre, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, nombre, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //aquí creamos la tabla de usuario (dni, nombre, ciudad, numero)
        db.execSQL("create table usuario(dni integer primary key, nombre text, ciudad text, numero integer)");
    }
}

内容的提问来源于stack exchange,提问作者Uribe2304

火山引擎 最新活动