3 import android.content.Context;
\r
4 import android.database.SQLException;
\r
5 import android.database.sqlite.SQLiteDatabase;
\r
6 import android.database.sqlite.SQLiteOpenHelper;
\r
8 import com.jm.JmPattern;
\r
9 import com.jm.utility.Debug;
\r
10 import com.jm.utility.JmException;
\r
12 public class DatabaseHelper extends SQLiteOpenHelper {
\r
13 public final static int NONE_ID = -1;
\r
14 public final static int ENGLISH_ID = 1;
\r
15 public final static int JAPANEASE_ID = 2;
\r
16 public final static int FRENCH_ID = 3;
\r
17 private static int langId = NONE_ID;
\r
18 private Context context;
\r
19 private static boolean convFlag1to2 = false;
\r
20 private static boolean convFlag2to3 = false;
\r
22 private static DatabaseHelper instance = null;
\r
24 public static DatabaseHelper getInstance() {
\r
28 public static void init(Context context) throws JmException {
\r
29 DaoFactory f = DaoFactory.getInstance();
\r
30 f.setContext(context.getApplicationContext());
\r
32 if (instance != null) {
\r
36 DatabaseHelper helper = new DatabaseHelper(context);
\r
38 // onCreate, onUpgradeを呼び出す
\r
39 SQLiteDatabase db = helper.getWritableDatabase();
\r
41 // アップグレードで無ければ、SQL分を定義
\r
42 // アップデートの場合は、後で実行する
\r
43 if (!helper.getConvFlag()) {
\r
44 Dao.getInstance().start(db);
\r
48 public DatabaseHelper(Context context) {
\r
49 // super(context, "JuggleMaster.db", null, 2);
\r
50 super(context, "JuggleMaster.db", null, 3);
\r
53 // setLangId(context);
\r
54 this.context = context;
\r
58 public void onCreate(SQLiteDatabase db) {
\r
59 db.beginTransaction();
\r
61 Dao dao = Dao.getInstance();
\r
62 dao.init(db, context);
\r
63 db.setTransactionSuccessful();
\r
64 } catch (SQLException e) {
\r
65 Debug.d(this, null, e);
\r
68 db.endTransaction();
\r
73 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
\r
77 if (oldVersion == v && newVersion > v) {
\r
78 convFlag1to2 = true;
\r
82 if (oldVersion <= v && newVersion > v) {
\r
83 convFlag2to3 = true;
\r
87 public void convert(SQLiteDatabase db, int langId) throws JmException {
\r
89 convert1to2(db, langId);
\r
95 convFlag1to2 = false;
\r
96 convFlag2to3 = false;
\r
99 private void convert1to2(SQLiteDatabase db, int langId) throws JmException {
\r
100 db.execSQL("ALTER TABLE pattern ADD COLUMN lang integer;");
\r
101 db.execSQL("ALTER TABLE pattern ADD COLUMN idx integer;");
\r
103 Dao dao = Dao.getInstance();
\r
104 for (int i = 0; i < 7; i++) {
\r
106 list = dao.get(db, "type = " + i, null);
\r
107 int size = list.length;
\r
108 for (int j = 0; j < size; j++) {
\r
109 JmPattern item = list[j];
\r
110 int id = item.getId();
\r
111 db.execSQL("UPDATE pattern set idx = " + j + " WHERE id = "
\r
116 // 既存のデータは、日本語のデータに変換
\r
117 db.execSQL("UPDATE pattern set LANG = " + JAPANEASE_ID
\r
118 + " WHERE TYPE <> 6;");
\r
119 db.execSQL("DELETE FROM pattern WHERE NAME = '[新規作成]';");
\r
120 // ただし、マイパターンは、システムの言語に
\r
121 db.execSQL("UPDATE pattern set LANG = " + langId + " WHERE TYPE = 6;");
\r
122 db.execSQL("create index langindex on pattern(lang);");
\r
123 db.execSQL("create index idxindex on pattern(idx);");
\r
126 private void convert2to3(SQLiteDatabase db) {
\r
127 Dao dao = Dao.getInstance();
\r
131 dao.initData2to3(db, context);
\r
133 JmDao jdao = JmDao.getInstance();
\r
134 jdao.init(null, context);
\r
137 public boolean getConvFlag() {
\r
138 return convFlag1to2 || convFlag2to3;
\r
141 public boolean getConvFlag1to2() {
\r
142 return convFlag1to2;
\r
145 public boolean getConvFlag2to3() {
\r
146 return convFlag2to3;
\r
149 public void setLangId(int id) {
\r
153 public int getLangId() {
\r
154 if (langId != NONE_ID) {
\r
157 String id = context.getString(com.jm.R.string.lang);
\r
158 return Integer.valueOf(id).intValue();
\r