今天学习了1h。
数据库操作类
新建一个类"UserDBHelper",这个类extends SQLiteOpenHelper
public class UserDBHelper extends SQLiteOpenHelper {
}
定义类内的成员变量
private static final String TAG = "UserDBHelper"; //标签名称
private static final int DB_VERSION = 1; //数据库版本
private static final String DB_NAME = "user.db"; //数据库名称
private static final String TABLE_NAME = "user_info"; //数据库表名
private static UserDBHelper mHelper = null; //数据库帮助器实例
private SQLiteDatabase mDB = null; //数据库实例
这里包含了数据库的名称、版本号、数据库表名、帮助器的实例名称、数据库的实例名称
static:指的是静态全局变量
final:指该变量一旦被赋值,便不可更改
(标签名、数据库名、版本号、数据库表名这几个定义了就不会改,这个类就是用来操作这个数据库跟里面的这个表,所以理解为常量也可以)
定义类的两个构造函数用来生成数据库帮助实例“mHelper”
1、这个只有一个参数的构造函数,参数是数据库的名称(可以理解为用于在还没有创建数据库的时候使用这个参数创建数据库并生成实例)
private UserDBHelper(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
2、这个有两个参数的构造函数,参数是数据库的名称、版本号(理解为用于在已经有数据库的时候使用这个参数生成实例)
private UserDBHelper(Context context, int version) {
super(context, DB_NAME, null, version);
}
定义方法来获取一个实例
public static UserDBHelper getInstance(Context context, int version) {
if (version > 0 && mHelper == null) {
mHelper = new UserDBHelper(context, version);
} else if (mHelper == null) {
mHelper = new UserDBHelper(context);
}
return mHelper;
}
定义方法用于打开数据库的读连接操作、写连接操作(SQLite的读取和写入操作是分开的,所以要分别创建)
public SQLiteDatabase openReadLink() {
if (mDB == null || !mDB.isOpen()) {
mDB = mHelper.getReadableDatabase();
}
return mDB;
}
public SQLiteDatabase openWriteLink() {
if (mDB == null || !mDB.isOpen()) {
mDB = mHelper.getWritableDatabase();
}
return mDB;
}
定义方法关闭数据库
public void closeLink() {
if (mDB != null && mDB.isOpen()) {
mDB.close();
mDB = null;
}
}
重载SQLiteOpenHelper的方法(用于在数据库内创建表这里注意如果数据库中之前有表会删除重新建立)
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate");
//查询语句:如果存在表,则删除
String drop_sql = "DROP TABLE IF EXISTS " + TABLE_NAME + ";";
Log.d(TAG, "drop_sql:" + drop_sql);
//执行查询(删除表)
db.execSQL(drop_sql);
//查询语句:创建表(演示数据库升级时要先把下面这行注释)
String create_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+ "name VARCHAR NOT NULL," + "age INTEGER NOT NULL,"
+ "height LONG NOT NULL," + "weight FLOAT NOT NULL,"
+ "married INTEGER NOT NULL," + "update_time VARCHAR NOT NULL"
+ ");";
Log.d(TAG, "create_sql:" + create_sql);
//执行查询(创建表)
db.execSQL(create_sql);
}
重载SQLiteOpenHelper的onUpgrade方法(用于修改数据库的表结构增加表内的列)
@Override
// 修改数据库,执行表结构变更语句
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "onUpgrade oldVersion=" + oldVersion + ", newVersion=" + newVersion);
if (newVersion > 1) {
//Android的ALTER命令不支持一次添加多列,只能分多次添加
String alter_sql = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + "phone VARCHAR;";
Log.d(TAG, "alter_sql:" + alter_sql);
db.execSQL(alter_sql);
alter_sql = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + "password VARCHAR;";
Log.d(TAG, "alter_sql:" + alter_sql);
db.execSQL(alter_sql);
}
}
生成实例-->打开连接(写或者读)-->组织好数据-->数据库操作-->关闭连接(关闭数据库)
标签:总结,3.19,UserDBHelper,mDB,每日,mHelper,sql,null,数据库 From: https://www.cnblogs.com/ZRGUGUGU818/p/17234119.html