SQLite数据库创建时机咨询?关于super语句的疑问
关于SQLite数据库创建时机与super语句的疑问解答
嘿,我来帮你逐个理清这两个问题:
一、数据库何时创建?
你的AdminSQLiteOpenHelper本身只是一个数据库辅助管理类,数据库并不会在你实例化这个类的时候直接创建。真正的创建触发时机是当你调用SQLiteOpenHelper的getReadableDatabase()或者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




