LogCat
throws me the following exception:
android.database.sqlite.SQLiteException: no such column: tblAlarmSetup.ASID (code 1): , while compiling: SELECT tblAlarmSetup.ASID AS A, tblContact.CID AS B, tblContact.Contact AS C, tblSubject.SubID AS D, tblSubject.Subject AS E, tblAlarmSetup.IsActive AS F FROM tblSubject INNER JOIN (tblContact INNER JOIN tblAlarmSetup ON tblContact.CID = tblAlarmSetup.CID) ON tblSubject.SubID = tblAlarmSetup.SubID WHERE tblContact.CID = 1 AND tblSubject.SubID = 1
However I only get this exception when I debug the application on my old samsung S2 phone. on my newer Xperia Z3 everything works just fine.
What could be wrong with this SQL statement that it doesn't work on older devices?
I got the following 3 tables:
tblContact
: CID, ContacttblSubject
: SubID, Subject
Both are linked with :
tblAlarmSetup
: ASID, CID, SubId, IsActive
Edit: samsung s2 runs android 4.1.2; xperia z3 runs android 6.0.1
Edit 2: here is some of the relevant code
public class DbHandler extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "ReminderDB.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_CONTACT = "tblContact";
private static final String TABLE_CONTACT_CID_ATTR = "CID";
private static final String TABLE_CONTACT_CID = TABLE_CONTACT + "." + TABLE_CONTACT_CID_ATTR;
private static final String TABLE_CONTACT_CONTACT_ATTR = "Contact";
private static final String TABLE_CONTACT_CONTACT = TABLE_CONTACT + "." + TABLE_CONTACT_CONTACT_ATTR;
private static final String TABLE_SUBJECT = "tblSubject";
private static final String TABLE_SUBJECT_SUBID_ATTR = "SubID";
private static final String TABLE_SUBJECT_SUBID = TABLE_SUBJECT + "." + TABLE_SUBJECT_SUBID_ATTR;
private static final String TABLE_SUBJECT_SUBJECT_ATTR = "Subject";
private static final String TABLE_SUBJECT_SUBJECT = TABLE_SUBJECT + "." + TABLE_SUBJECT_SUBJECT_ATTR;
private static final String TABLE_ALARMSETUP = "tblAlarmSetup";
private static final String TABLE_ALARMSETUP_ASID_ATTR = "ASID";
private static final String TABLE_ALARMSETUP_ASID = TABLE_ALARMSETUP + "." + TABLE_ALARMSETUP_ASID_ATTR;
private static final String TABLE_ALARMSETUP_CID_ATTR = "CID";
private static final String TABLE_ALARMSETUP_CID = TABLE_ALARMSETUP + "." + TABLE_ALARMSETUP_CID_ATTR;
private static final String TABLE_ALARMSETUP_SUBID_ATTR = "SubID";
private static final String TABLE_ALARMSETUP_SUBID = TABLE_ALARMSETUP + "." + TABLE_ALARMSETUP_SUBID_ATTR;
private static final String TABLE_ALARMSETUP_ISACTIVE_ATTR = "IsActive";
private static final String TABLE_ALARMSETUP_ISACTIVE = TABLE_ALARMSETUP + "." + TABLE_ALARMSETUP_ISACTIVE_ATTR;`
Create Database:
@Override
public void onCreate(SQLiteDatabase db) {
final String CREATE_CONTACT_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_CONTACT + " ("
+ TABLE_CONTACT_CID_ATTR + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TABLE_CONTACT_CONTACT_ATTR + " STRING NOT NULL UNIQUE)";
//CID (PK, FK) | Contact (unique)
final String CREATE_SUBJECT_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_SUBJECT + " ("
+ TABLE_SUBJECT_SUBID_ATTR + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TABLE_SUBJECT_SUBJECT_ATTR + " STRING NOT NULL UNIQUE)";
//SubID (PK, FK) | Subject (unique)
final String CREATE_ALARMSETUP_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_ALARMSETUP + " ("
+ TABLE_ALARMSETUP_ASID_ATTR + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TABLE_ALARMSETUP_CID_ATTR + " INTEGER NOT NULL, "
+ TABLE_ALARMSETUP_SUBID_ATTR + " INTEGER NOT NULL, "
+ TABLE_ALARMSETUP_ISACTIVE_ATTR + " INTEGER NOT NULL DEFAULT 0, "
+ "UNIQUE (" + TABLE_ALARMSETUP_CID_ATTR + ", " + TABLE_ALARMSETUP_SUBID_ATTR + "), "
+ "FOREIGN KEY (" + TABLE_ALARMSETUP_CID_ATTR + ") REFERENCES " + TABLE_CONTACT + " (" + TABLE_CONTACT_CID_ATTR + "), "
+ "FOREIGN KEY (" + TABLE_ALARMSETUP_SUBID_ATTR + ") REFERENCES " + TABLE_SUBJECT + " (" + TABLE_SUBJECT_SUBID_ATTR + "))";
//ASID (PK) | CID (Unique in combination with SubID) | SubID
db.execSQL(CREATE_CONTACT_TABLE);
db.execSQL(CREATE_SUBJECT_TABLE);
db.execSQL(CREATE_ALARMSETUP_TABLE);
}
the query:
String query = "SELECT "
+ TABLE_ALARMSETUP_ASID + " AS A, "
+ TABLE_CONTACT_CID + " AS B, "
+ TABLE_CONTACT_CONTACT + " AS C, "
+ TABLE_SUBJECT_SUBID + " AS D, "
+ TABLE_SUBJECT_SUBJECT + " AS E, "
+ TABLE_ALARMSETUP_ISACTIVE + " AS F"
+ " FROM " + TABLE_SUBJECT
+ " INNER JOIN (" + TABLE_CONTACT
+ " INNER JOIN " + TABLE_ALARMSETUP
+ " ON " + TABLE_CONTACT_CID + " = " + TABLE_ALARMSETUP_CID + ")"
+ " ON " + TABLE_SUBJECT_SUBID + " = " + TABLE_ALARMSETUP_SUBID
+ " WHERE " + TABLE_CONTACT_CID + " = " + cid
+ " AND " + TABLE_SUBJECT_SUBID + " = " + subid;
Cursor cursor = db.rawQuery(query, null);
Edit 3: please don't close this thread. The suggestion you gave me does not answer my question. OnCreate
was triggered and the tables exist. I can do select queries of single tables like SELECT * FROM tblAlarmSetup
but it doesn't work on my samsung device if I include joins into my queries.