安卓数据库封装

来源:互联网 发布:跳跃网络 中青宝 编辑:程序博客网 时间:2024/05/22 15:30

不妥之处希望给予纠正,学习中


首先写一个数据库的增删改查的抽象类,五个抽象方法,我只使用了一个User表,所以只有一个获取User表的方法,代码如下

package com.example.a21150.projectutils;import android.content.Context;import java.sql.SQLException;import java.util.List;/** * Created by 21150 on 2016/11/8. */public abstract class DataBaseUtils<T> {    private static DataBaseUtils mUserDataBaseUtils;    public abstract void insert(T clzz) throws SQLException;    public abstract void insert(List<T> list) throws SQLException;    public abstract void delete(T clzz) throws SQLException;    public abstract void update(T clzz) throws SQLException;    public abstract List<T> queryForAll() throws SQLException;    public abstract List<T> query(T clzz) throws SQLException;    /**     * 获取user表的Dao     * @param context     * @return     */    public static DataBaseUtils getUserDabaUtils(Context context) {        if (mUserDataBaseUtils == null) {            synchronized (DataBaseUtils.class) {                mUserDataBaseUtils = UserDao.getDao(context);            }        }        return mUserDataBaseUtils;    }}

下面是User表的Dao类,继承DataBaseUtils类,实现抽象方法,代码如下

package com.example.a21150.projectutils;import android.content.Context;import com.j256.ormlite.dao.Dao;import java.sql.SQLException;import java.util.List;/** * Created by 21150 on 2016/11/8. */public class UserDao extends DataBaseUtils<User> {    //User表dao    private Dao<User,Integer> mUserDao;    private static UserDao mOrmLiteDataBase;    private UserDao(Context context){        try {            mUserDao = (Dao<User, Integer>) OrmLiteHelper.getInstance(context).getDao(User.class);        } catch (SQLException e) {            e.printStackTrace();        }    }    public static UserDao getDao(Context context){        if (mOrmLiteDataBase == null){            synchronized (UserDao.class){                mOrmLiteDataBase = new UserDao(context);            }        }        return mOrmLiteDataBase;    }    @Override    public void insert(User clzz) throws SQLException {        mUserDao.create(clzz);    }    @Override    public void insert(List<User> list) throws SQLException {        mUserDao.create(list);    }    @Override    public void delete(User clzz) throws SQLException {        mUserDao.delete(clzz);    }    @Override    public void update(User clzz) throws SQLException {            mUserDao.update(clzz);    }    @Override    public List<User> queryForAll() throws SQLException {        return mUserDao.queryForAll();    }    @Override    public List<User> query(User clzz) throws SQLException {        List<User> name = mUserDao.queryBuilder().where().eq("name", clzz.getName()).query();        return name;    }}

下面时数据库的框架类,我这里用的是ormlite,android studio 导包

compile 'com.j256.ormlite:ormlite-android:5.0'

代码如下

package com.example.a21150.projectutils;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;import com.j256.ormlite.dao.Dao;import com.j256.ormlite.support.ConnectionSource;import com.j256.ormlite.table.TableUtils;import java.sql.SQLException;/** * Created by 21150 on 2016/11/7. */public class OrmLiteHelper extends OrmLiteSqliteOpenHelper{    private static String dataBaseName = "mydata.db";    private static int version = 1;    private Dao<User,Integer> mUserDao;    private static OrmLiteHelper mOrmLiteHelper;    public OrmLiteHelper(Context context) {        super(context, dataBaseName, null, version);    }    /**     * 创建数据库,每次初始化的时候调用     * @param database     * @param connectionSource     */    @Override    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {        try {            TableUtils.createTable(connectionSource,User.class);        } catch (SQLException e) {            e.printStackTrace();        }    }    /**     * 更新数据库     * @param database  原生SQLiteDatabase,可以执行sql语句     * @param connectionSource 链接数据库资源     * @param oldVersion 旧版本号     * @param newVersion 新版本号     */    @Override    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {        try {            TableUtils.dropTable(connectionSource,User.class,true);        } catch (SQLException e) {            e.printStackTrace();        }    }    /**     * 单例获取数据库     * @param context     * @return     */    public static synchronized OrmLiteHelper  getInstance(Context context){        if(mOrmLiteHelper == null){            synchronized (OrmLiteHelper.class){                mOrmLiteHelper = new OrmLiteHelper(context);            }        }        return mOrmLiteHelper;    }    /**     * 获取单例的dao     * @return     */    private Dao<User,Integer> getUserDao(){        if (mUserDao == null){            synchronized (OrmLiteHelper.class){                try {                    mUserDao = mOrmLiteHelper.getDao(User.class);                } catch (SQLException e) {                    e.printStackTrace();                }            }        }        return mUserDao;    }}

在activity中使用

package com.example.a21150.projectutils;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import java.sql.SQLException;import java.util.List;public class MainActivity extends AppCompatActivity {    private DataBaseUtils<User> mDataBaseUtils;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mDataBaseUtils = DataBaseUtils.getUserDabaUtils(this);        try {            List<User> song = mDataBaseUtils.query(new User("dddd", 15));        } catch (SQLException e) {            e.printStackTrace();        }    }}

User类如下

package com.example.a21150.projectutils;import com.j256.ormlite.field.DatabaseField;import com.j256.ormlite.table.DatabaseTable;/** * Created by 21150 on 2016/11/7. */@DatabaseTable(tableName = "user")public class User {    @DatabaseField(columnName = "id", generatedId = true)    private int id;    @DatabaseField(columnName = "name")    private String name;    @DatabaseField(columnName = "age")    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public User(String name, int age) {        this.name = name;        this.age = age;    }    public User(){}}

加入更换数据库框架时。只需要更改更改DataBaseUtils的实现类即可





0 0