zoukankan      html  css  js  c++  java
  • 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();
        }

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

  • 相关阅读:
    C the basics (DMA)
    穷举子集
    排序算法(1)
    C the basics (array, complex)
    Linux中date命令的各种实用方法
    syntaxhighlight实现帝国cms代码高亮/语法高亮(一)
    帝国cms修改评论表情每行显示个数
    java 中hashcode 与 equals的关系
    Java 远程调用与分布式通信的区别
    帝国CMS的phomenewspic/ecmsinfo标签详解
  • 原文地址:https://www.cnblogs.com/android-xplore/p/3574384.html
Copyright © 2011-2022 走看看