package com.znv.linkup.db;
import java.util.List;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.znv.linkup.ViewSettings;
import com.znv.linkup.core.config.ModeCfg;
/**
* SQLite数据库处理帮助类,存储关卡最高分,是否激活,游戏星级
*
* @author yzb
*
*/
class DbHelper extends SQLiteOpenHelper {
private List<ModeCfg> modeCfgs;
public DbHelper(Context context, List<ModeCfg> config) {
super(context, ViewSettings.DbFileName, null, ViewSettings.DbVersion);
this.modeCfgs = config;
}
/**
* 根据游戏配置信息创建表并初始化
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table scores(level int primary key, rank int, maxscore int, mintime int, isactive int, star int, isupload int);";
db.execSQL(sql);
initDb(db);
}
/**
* 判断是否默认激活
*
* @param index
* 要判断的关卡id
* @return 激活true
*/
private boolean isActive(int index) {
if (ViewSettings.DefaultActiveLevels.length == 0) {
return true;
}
for (int i : ViewSettings.DefaultActiveLevels) {
if (i < index) {
continue;
} else if (i == index) {
return true;
} else {
return false;
}
}
return false;
}
private void initDb(SQLiteDatabase db) {
String sql;
int index = 0;
db.beginTransaction();
for (int m = 0; m < modeCfgs.size(); m++) {
for (int r = 0; r < modeCfgs.get(m).getRankInfos().size(); r++) {
for (int l = 0; l < modeCfgs.get(m).getRankInfos().get(r).getLevelInfos().size(); l++) {
sql = "insert into scores(level, rank, maxscore, mintime, isactive, star, isupload) values(?,?,?,?,?,?,?)";
// 控制默认激活的关卡数
if (isActive(index)) {
try {
db.execSQL(sql, new Object[] { index++, r, 0, 0, 1, 0, 0 });
} catch (Exception ex) {
Log.d("sqlite", ex.getMessage());
}
} else {
try {
db.execSQL(sql, new Object[] { index++, r, 0, 0, 0, 0, 0 });
} catch (Exception ex) {
Log.d("sqlite", ex.getMessage());
}
}
}
}
}
db.setTransactionSuccessful();
db.endTransaction();
}
// private void alterTable(SQLiteDatabase db) {
// String sql = "alter table scores add column isupload integer DEFAULT 0";
// try {
// db.execSQL(sql);
// } catch (Exception ex) {
// Log.d("sqlite", ex.getMessage());
// }
// }
private void initNewLevels(SQLiteDatabase db) {
String sql;
int index = 0;
db.beginTransaction();
// 新增模式
int m = 4;
if (m < modeCfgs.size()) {
for (int r = 0; r < modeCfgs.get(m).getRankInfos().size(); r++) {
for (int l = 0; l < modeCfgs.get(m).getRankInfos().get(r).getLevelInfos().size(); l++) {
sql = "insert into scores(level, rank, maxscore, mintime, isactive, star, isupload) values(?,?,?,?,?,?,?)";
// 控制默认激活的关卡数
if (isActive(index)) {
try {
db.execSQL(sql, new Object[] { index++, r, 0, 0, 1, 0, 0 });
} catch (Exception ex) {
Log.d("sqlite", ex.getMessage());
}
} else {
try {
db.execSQL(sql, new Object[] { index++, r, 0, 0, 0, 0, 0 });
} catch (Exception ex) {
Log.d("sqlite", ex.getMessage());
}
}
}
}
}
db.setTransactionSuccessful();
db.endTransaction();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 如果level存在,则insert不成功,不存在,则新增
initDb(db);
// 在表中增加一列,确定是否上传
// alterTable(db);
initNewLevels(db);
}
}