I am working with an app that was created by someone else. They included a handler which I am using. I need to add an extra table to the database. I have created my own class to add to the database and as far as I can see I have included all I need.
At the moment, when I run the app and execute the command to add the table, it does not add it to the database. From what I can understand, in order to add a new table to the existing database I need to increase the version of the existing app.
The problem is that when I increase the version it crashes the app. I do not have much experience with databases and do not know where to look. I know that the first page requires a username and password, and I wonder if the new version does not have this information and this is what is causing the crash.
Below is the handler class:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "PGAAPPOINTMENTS.db";
private static final int DATABASE_VERSION = 2;
private SQLiteDatabase db = null;
public DatabaseHelper(Context c) {
super(c, DATABASE_NAME, null, DATABASE_VERSION);
}
public void openToRead() {
close();
db = this.getReadableDatabase();
}
public void openToWrite() {
close();
db = this.getWritableDatabase();
}
public void close() {
if (db != null) {
super.close();
db = null;
}
}
@Override
public void onCreate(SQLiteDatabase db) {
AppointmentTable.createTable(db);
PlayerTable.createTable(db);
PractitionerTable.createTable(db);
TableRoutine.createTable(db);
TableDiagnostic.createTable(db);
TableAssessment.createTable(db);
TableFollowUp.createTable(db);
TableNote.createTable(db);
TableSubandObAssessment.createTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
TableRoutine.dropTable(db);
AppointmentTable.dropTable(db);
TableDiagnostic.dropTable(db);
TableAssessment.dropTable(db);
TableFollowUp.dropTable(db);
TableNote.dropTable(db);
PlayerTable.dropTable(db);
PractitionerTable.dropTable(db);
TableSubandObAssessment.dropTable(db);
onCreate(db);
}
and here is the class to add the new table:
public class TableSubandObAssessment {
public static final String TAG = "TableSubandObAssessment";
public static final String KEY_TABLE = "SubandObassessments";
private static final String KEY_APPOINTMENT_ID = "appointmentID";
private static final String KEY_TYPE = "type";
private static final String KEY_ASSESSMENT = "assessment";
private static final String KEY_VARIABLE1 = "variable1";
private static final String KEY_VARIABLE2 = "vriable2";
private static final String KEY_VARIABLE3 = "vriable3";
private static final String KEY_VARIABLE4 = "vriable4";
private static DatabaseHelper helper;
private static Context context;
public static SQLiteDatabase db;
static public void createTable(SQLiteDatabase db) {
String createTbl =
"CREATE TABLE " + KEY_TABLE
+ " (" + KEY_APPOINTMENT_ID + " INTEGER PRIMARY KEY NOT NULL, "
+ KEY_TYPE + " TEXT NOT NULL, "
+ KEY_ASSESSMENT + " TEXT NOT NULL, "
+ KEY_VARIABLE1 + " TEXT, "
+ KEY_VARIABLE2 + " TEXT NOT NULL, "
+ KEY_VARIABLE3 + " TEXT, "
+ KEY_VARIABLE4 + " TEXT " + ");";
db.execSQL(createTbl);
}
public static void dropTable(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + KEY_TABLE);
createTable(db);
}
public TableSubandObAssessment(Context context) {
this.context = context;
}
public static SQLiteDatabase open() throws SQLException {
helper = new DatabaseHelper(context);
db = helper.getWritableDatabase();
return db;
}
public static void close() {
helper.close();
}
public static long insertTableSubandObAssessment(int appointmentID, String type, String assessment, String variable1, String variable2, String variable3, String variable4) {
ContentValues values = new ContentValues();
values.put(KEY_APPOINTMENT_ID, appointmentID);
values.put(KEY_TYPE, type);
values.put(KEY_ASSESSMENT, assessment);
values.put(KEY_VARIABLE1, variable1);
values.put(KEY_VARIABLE2, variable2);
values.put(KEY_VARIABLE3, variable3);
values.put(KEY_VARIABLE4, variable4);
return db.insert(KEY_TABLE, null, values);
}
}
and here is the logcat:
08-07 19:00:41.097: E/AndroidRuntime(25210): FATAL EXCEPTION: main
08-07 19:00:41.097: E/AndroidRuntime(25210): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ucl.pga/com.ucl.pga.LoginActivity}: android.database.sqlite.SQLiteException: table routineTable already exists (code 1): , while compiling: CREATE TABLE routineTable (_id INTEGER PRIMARY KEY AUTOINCREMENT, routineNo INT NOT NULL, appointment_id INT NOT NULL);
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.os.Handler.dispatchMessage(Handler.java:99)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.os.Looper.loop(Looper.java:137)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread.main(ActivityThread.java:4745)
08-07 19:00:41.097: E/AndroidRuntime(25210): at java.lang.reflect.Method.invokeNative(Native Method)
08-07 19:00:41.097: E/AndroidRuntime(25210): at java.lang.reflect.Method.invoke(Method.java:511)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-07 19:00:41.097: E/AndroidRuntime(25210): at dalvik.system.NativeStart.main(Native Method)
08-07 19:00:41.097: E/AndroidRuntime(25210): Caused by: android.database.sqlite.SQLiteException: table routineTable already exists (code 1): , while compiling: CREATE TABLE routineTable (_id INTEGER PRIMARY KEY AUTOINCREMENT, routineNo INT NOT NULL, appointment_id INT NOT NULL);
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.ucl.pga.db.TableRoutine.createTable(TableRoutine.java:27)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.ucl.pga.db.DatabaseHelper.onCreate(DatabaseHelper.java:39)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.ucl.pga.db.DatabaseHelper.onUpgrade(DatabaseHelper.java:58)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
08-07 19:00:41.097: E/AndroidRuntime(25210): at com.ucl.pga.LoginActivity.onCreate(LoginActivity.java:28)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.Activity.performCreate(Activity.java:5008)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-07 19:00:41.097: E/AndroidRuntime(25210): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-07 19:00:41.097: E/AndroidRuntime(25210): ... 11 more
0 comments:
Post a Comment