Android SQLite操作类--封装

在Android操作数据库一般都是先继承SQLiteOpenHelper类,下面直接贴上代码:

public class DBHelper extends SQLiteOpenHelper {
    /**
     * @Fields name : 数据库名称
     */
    private final static String name = "info.db";
    /**
     * @Fields version :版本号
     */
    private final static int version = 1;
    private Class<?>[] clazzs = new Class<?>[] { DemoBean.class };//关联数据库的实体类
    public DBHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
    }
    public DBHelper(Context context) {
        super(context, name, null, version);
    }

    /*
     * 用来创建数据库中的表 <p>Title: onCreate</p> <p>Description: </p>
     * @param db
     * @see
     * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
     * .SQLiteDatabase)
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        for (int i = 0; i < clazzs.length; i++) {
            DBUtils.createTable(db, clazzs[i]);
        }
    }

    /*
     * 当数据库的版本变更之后就会调用这个方法 <p>Title: onUpgrade</p> <p>Description: </p>
     *
     * @param db
     *
     * @param oldVersion
     *
     * @param newVersion
     *
     * @see
     * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
     * .SQLiteDatabase, int, int)
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

此类中需要注意的是 DBUtils.createTable(db, clazzs[i]);这个静态的方法,该方法主要用来自动生成SQL语句(因为本人最不喜欢写SQL语句了,使用的是Java反射技术)。这里要用到 Java Annotation,不知道的可以百度一下)。

 

另外呢,数据库的操作无非就是增删改查—>为了不对每个表都写个增删改查的方法,这里全部使用泛型方法,但是要注意的是:JavaBeen中的类名和字段名都要和数据库中表的字段结构一样。还有一点要注意的是:没有尽量的使用接口,我认为没有必要。

由于代码过长:我只贴插入方法了:

 

public <T> void insertData(T t) throws NumberFormatException,
            IllegalArgumentException, IllegalAccessException {
        SQLiteDatabase db = null;
        synchronized (DriverManager.class) {
            db = helper.getWritableDatabase();
        }
        Field[] fields = t.getClass().getDeclaredFields();// 使用暴力
        ContentValues values = new ContentValues();
        for (Field field : fields) {
            // 允许访问私有变量
            field.setAccessible(true);
            if ("double".equals(field.getType().toString())) {
                values.put(field.getName(),
                        Double.valueOf(String.valueOf(field.get(field))));
            }
            if ("int".equals(field.getType().toString())) {
                values.put(field.getName(),
                        Integer.valueOf(String.valueOf(field.get(field))));
            }
            if ("float".equals(field.getType().toString())) {
                values.put(field.getName(),
                        Float.valueOf(String.valueOf(field.get(field))));
            }
            if ("class java.lang.String".equals(field.getType().toString())) {
                values.put(field.getName(), String.valueOf(field.get(field)));
            }
        }
        db.insert(t.getClass().getSimpleName(), null, values);
        db.close();
    }

好了暂时就写这么多了,等我下次组织语言在写 ,第一次写嘛!!大笑

转载于:https://www.cnblogs.com/android-xplore/p/3574384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值