package net.yasite.dao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.content.Context; import android.content.res.AssetManager; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import de.greenrobot.dao.AbstractDaoMaster; import de.greenrobot.dao.identityscope.IdentityScopeType; import de.greenrobot.dao.query.QueryBuilder; public class DaoMaster extends AbstractDaoMaster { private static DaoMaster instance; private static DaoSession daoSession; public static DaoMaster getInstance(Context context){ // QueryBuilder.LOG_VALUES = true; // QueryBuilder.LOG_SQL = true; if(instance == null){ synchronized (DaoMaster.class) { if(instance == null){ instance = new DaoMaster(context); } } } return instance; } private DaoMaster(Context context){ super((new DaoMaster.OpenHelper(context, DBConstant.DBNAME, null)).getWritableDatabase(), DBConstant.DBVERSION); // registerDaoClass(PlayRoundDao.class); // registerDaoClass(MatchDao.class); // registerDaoClass(ChannelInfoEntityDao.class); registerDaoClass(UserDao.class); registerDaoClass(NewsDao.class); // registerDaoClass(ThreadTempDao.class); } private static void createAllTables(SQLiteDatabase db, boolean ifNotExists) { // PlayRoundDao.createTable(db, ifNotExists); // MatchDao.createTable(db, ifNotExists); // ChannelInfoEntityDao.createTable(db, ifNotExists); UserDao.createTable(db, ifNotExists); NewsDao.createTable(db, ifNotExists); // ThreadTempDao.createTable(db, ifNotExists); } private static class OpenHelper extends SQLiteOpenHelper { private Context context; public OpenHelper(Context context, String name, CursorFactory factory) { super(context, name, factory, DBConstant.DBVERSION); this.context = context; } @Override public void onCreate(SQLiteDatabase db) { createAllTables(db, false); // loadAssetsData(db,context); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch(oldVersion){ // case 1: // MatchDao.createTable(db, true); // case 2: // ChannelInfoEntityDao.createTable(db, true); // case 3: // UserDao.createTable(db, true); // case 4: // String sql = "ALTER TABLE " + MatchDao.TABLENAME + " ADD `webLivingFlag` TEXT"; // db.execSQL(sql.toString()); // NewsDao.createTable(db, true); // case 5: // ThreadTempDao.createTable(db, true); } } } public DaoSession newSession() { return newSession(IdentityScopeType.None); } public DaoSession newSession(IdentityScopeType type) { if(daoSession == null){ daoSession = new DaoSession(instance.db, type, instance.daoConfigMap); } return daoSession; } public static void clear(){ instance = null; daoSession = null; } public static void loadAssetsData(SQLiteDatabase db,Context context){ AssetManager assetManager = context.getAssets(); try { InputStream is = assetManager.open("sql.txt"); if(is == null){ throw new RuntimeException("sql.txt不存在"); } String encoding="GBK"; InputStreamReader read = new InputStreamReader(is,encoding); BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; StringBuffer sql = new StringBuffer(0); while((lineTxt = bufferedReader.readLine()) != null){ sql.append(lineTxt); if(lineTxt.endsWith(";")){ db.execSQL(sql.toString()); sql.setLength(0); } } read.close(); } catch (IOException e) { e.printStackTrace(); } } }