Java安卓开发之SQLiteDatabase上(通俗易懂版)——第7章

  介绍:

        这里的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()函数中执行数据库创建指令即可,创建之前需要明确几个变量:

  1. 数据库的表名(TABLE_NAME)
  2. 数据库列名,以及存储的类型(如姓名-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,一般一下情况需要用到:
    1. 性能优化:在某些情况下,你可能需要优化数据库查询的性能。通过自定义游标,你可以实现更高效的数据访问模式,比如延迟加载或者批量加载数据。

    2. 数据转换:如果你的应用需要对从数据库中检索出的数据进行转换或格式化,自定义游标可以在这个层面上提供帮助。

    3. 实现特定的数据结构:默认的游标实现是基于行和列的访问模式。如果你需要实现更复杂的数据结构,比如树形结构或者图形结构,你可能需要自定义游标来支持这些结构。

    4. 加密数据:如果你的数据库中存储了加密的数据,自定义游标可以在检索数据时自动进行解密操作。

    5. 监控和调试:在开发和测试阶段,你可能需要监控数据库查询的执行情况,自定义游标可以帮助你记录更多的信息,比如查询时间、访问模式等。

  • 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对应,以方便后期查询


        到目前为止,初始化工作彻底完毕了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Автомата Калашникова

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值