小白逆袭之路-私人定制Android数据库工具类实现

本文介绍了如何为Android开发定制数据库工具类,利用注解简化建表和插入操作。通过创建特定注解和实体类,避免手动编写SQL语句,减少错误,提高开发效率。
摘要由CSDN通过智能技术生成

前言

先来点废话

众所周知在Android开发中,SQLiteDatabse有一个帮助类SQLiteOpenHelper,它可以用来管理数据的创建和版本更新。它是一个abstract类,作为开发者我们可以实现该类来对数据库进行操作。

开发中容易出现的错误

1.每创建一张表,都需要写相应的建表语句
2.选择表的列名和实体类的字段名时纠结良久
3.建表语句和查询语句中有某个地方写错了,没对应上,将导致一系列错误
4.对每一张表都要写不同的sql语句,不厌其烦。

言归正传,代码拉出来

简单的注解开发

声明用于标记字段的注解,使得字段和列名一一对应。

package com.example.yrw.yuansqlite.annotion;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DbFiled {
   
    String value();
}

声明用于标记实体类的注解,使得与表能够一一对应。

package com.example.yrw.yuansqlite.annotion;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DbTable {
   
    String value();
}


然后编写我们的实体类,并使用注解

使用@DbTable标记类名Person与表名tb_person对应,使用@DbFiled标记字段age与列名age对应。

@DbTable("tb_person")
public class Person {
   
    @DbFiled("age")
    private Integer age;
    @DbFiled("name")
    private String name;

    public Person(Integer age, String name) {
   
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
   
        return age;
    }

    public void setAge(Integer age) {
   
        this.age = age;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }
}

接下来就是定制我们的帮助类了

这边重点讲一下建表和插入

前面注解使用的好处体现出来了,在这边我们不用使用具体的表名了,我们可以直接通过 entity.getAnnotation(DbTable.class).value()获取表名。

 tableName = entity.getAnnotation(DbTable.class).value();

同理这里可以使用field.getAnnotation(DbFiled.class).value()和field.getType()获得列名以及它对应的字段的类型。

@Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
   
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("CREATE TABLE IF NOT EXISTS ");
        stringBuffer.append(tableName + " ( ");
        Field[] fields = entityClass.getDeclaredFields();
        for (Field field : fields) {
   
            Class type = field.getType();
            if (type == String.class) {
   
                stringBuffer.append(field.getAnnotation(DbFiled.class).value() + " TEXT,");
            } else if (type == Double.class) {
   
                stringBuffer.append(field.getAnnotation(DbFiled.class).value() + " DOUBLE,");
            } else if (type == Integer.class) {
   
                stringBuffer.append(field.getAnnotation(DbFiled.class).value() + " INTEGER,");
            } else if (type == Long.class) {
   
                stringBuffer.append(field.getAnnotation(DbFiled.class).value() + " BIGINT,");
      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值