3.19每日总结
今天学习了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);
}
}
生成实例-->打开连接(写或者读)-->组织好数据-->数据库操作-->关闭连接(关闭数据库)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用