XiMengJianYu/.svn/pristine/60/609681f101e9611c71e66114b3ae3618f87a19ed.svn-base
2023-04-17 17:58:44 +08:00

120 lines
3.3 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.cm.utils.db;
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;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* Created by Xuer on 2017/3/9.
*/
public class DBHelper extends OrmLiteSqliteOpenHelper {
Context context;
private static DBHelper instance;
private Map<String, Dao> daos = new HashMap<String, Dao>();
/**
* @param context
* @param dbName 数据库名称
*/
private DBHelper(Context context, String dbName) {
super(context, dbName, null, 1);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
for (String table : getTableList())
TableUtils.createTable(connectionSource, Class.forName(table));
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
/**
* 单例获取该Helper
*
* @param dbName 数据库名称
* @param context
* @return
*/
public static synchronized DBHelper getHelper(Context context, String dbName) {
context = context.getApplicationContext();
if (instance == null) {
synchronized (DBHelper.class) {
if (instance == null)
instance = new DBHelper(context, dbName);
}
}
return instance;
}
/**
* getDao为一个泛型方法
* 会根据传入Class对象进行创建Dao
* 并且使用一个Map来保持所有的Dao对象
* 只有第一次调用时才会去调用底层的getDao()。
* @param clazz
* @return
* @throws SQLException
*/
public synchronized Dao getDao(Class clazz) throws SQLException {
Dao dao = null;
String className = clazz.getSimpleName();
if (daos.containsKey(className)) {
dao = daos.get(className);
}
if (dao == null) {
dao = super.getDao(clazz);
daos.put(className, dao);
}
return dao;
}
/**
* 释放资源
*/
@Override
public void close() {
super.close();
for (String key : daos.keySet()) {
Dao dao = daos.get(key);
dao = null;
}
}
//读取配置文件,获取所需要建的表
public String[] getTableList() {
String[] tables = null;
Properties properties = new Properties();
try {
properties.load(context.getAssets().open("dbtable.prop"));
String tablelist = properties.getProperty("tablelist");
tables = tablelist.split(",");
} catch (Exception e) {
e.printStackTrace();
}
return tables;
}
}