不妥之处希望给予纠正,学习中
首先写一个数据库的增删改查的抽象类,五个抽象方法,我只使用了一个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的实现类即可