介绍:
这里的SQL是不同于JDBC的一个数据库,这里的数据库是专门为安卓设计的轻量化的数据库,它简化了SQL的创建和版本管理部分功能,但是仍然需要有SQL语言进行操作。
本期会涉及对于SQLDb初始化一些功能,下一期是增删改查,下下期是关于如何适配ListView的一些繁琐操作,因此篇目分为上,中,下。感兴趣的小伙伴麻烦点个关注/订阅呗,感谢各位!
SQLiteDatabase初始化设置:
这里我们要新创建个类并继承于SQLiteOpenHelper,个人不喜欢其他博主的类名(SQLiteOH , DBHelper, OpenHelper) ,因为解析代码的时候容易看走眼,我比较倾向(SQL , SQLOH ) ,当然读者看自身本身喜好哈
public class SQL extends SQLiteOpenHelper {
}
这里我们要继续写个SQL()函数,并要覆写(Override) onCreate()和onUpgrade()函数,其中onCreate();是创建数据库执行时的函数,onUpgrade()是在更新数据库时候执行的函数,但是如果个人写个轻量级的应用可能不需要onUpgrade(),因此我们只需要在onCreate()函数中执行数据库创建指令即可,创建之前需要明确几个变量:
- 数据库的表名(TABLE_NAME)
- 数据库列名,以及存储的类型(如姓名-TEXT,年龄-INTEGER,等等)
除此之外,为了方便查询,我们还需要加一个id列,综上,以下是我的代码示例:
private static final String tableName = " table1 ";
private static final String colID = "_id";
private static final String colName1 = "name";
private static final String colName2 = "age";
private static final String CREATE_TABLE = "CREATE TABLE " + tableName + " (" +
colID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
colName1 + " TEXT NOT NULL, " +
colName2 + " INTEGER NOT NULL);"
;
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
除此之外,我们还应当要在SQL类中的SQL函数实现super(context, name, factory, version)方法,这也是初始化数据库的一部分,请读者不要遗漏,如果不写不会报RuntimeException而是编译时错误:Error: Call to super() must be first statement in constructor body
对于super各个参数的含义如下:
context
:当前应用的上下文。name
:数据库文件的名称。factory
:一个用于创建游标的工厂类。大部分情况下用不到,可以直接写Null,一般一下情况需要用到:-
性能优化:在某些情况下,你可能需要优化数据库查询的性能。通过自定义游标,你可以实现更高效的数据访问模式,比如延迟加载或者批量加载数据。
-
数据转换:如果你的应用需要对从数据库中检索出的数据进行转换或格式化,自定义游标可以在这个层面上提供帮助。
-
实现特定的数据结构:默认的游标实现是基于行和列的访问模式。如果你需要实现更复杂的数据结构,比如树形结构或者图形结构,你可能需要自定义游标来支持这些结构。
-
加密数据:如果你的数据库中存储了加密的数据,自定义游标可以在检索数据时自动进行解密操作。
-
监控和调试:在开发和测试阶段,你可能需要监控数据库查询的执行情况,自定义游标可以帮助你记录更多的信息,比如查询时间、访问模式等。
-
version
:数据库的版本号。
以下是我的代码示例:
private static final String dbName = "DATABASE.db";
private static final int DATABASE_VERSION = 1;
public SQL(Context context) {
super(context, dbName, null, DATABASE_VERSION);
}
到目前,还差最后一步初始化任务就完成了:覆写getWriteableDatabase()和getReadableDatabase():
@Override
public SQLiteDatabase getReadableDatabase() {
return super.getReadableDatabase();
}
@Override
public SQLiteDatabase getWritableDatabase() {
return super.getWritableDatabase();
}
到目前为止SQL初始化任务结束了
存储变量定义:
在开发中,我们常常需要有不同类型的变量需要存进SQL当中,但是如果单变量(全是String,亦或全是int)会导致我们需要多个Table存储这些,过于麻烦,那不如我们新定义一个类型,以便于我们将所有需要的变量存储器中即可:
新建一个Data类:
将需要存储的变量进行修饰,并设置setter和getter函数:
public class Data {
private int age ;
private String name ;
public void setData(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
注意:存储的变量提倡与SQL对应,以方便后期查询
到目前为止,初始化工作彻底完毕了