dimanche 5 avril 2015

Android sqlite query giving an error that column doesn't exist when it surely does

I'm getting an error in an SQL statement per below. The method causing the error is looking for a row with "Anniversary" in the column "name" from the table indicated below. If none such row is found, it will add a row. The error seems to be indicating that the table has no column "Anniversary" but I'm not trying to query a column Anniversary, but I am trying to query the column "name." Totally confused. Any help is appreciated. Sorry for all the code, but it all seems relevant, so I tried to break it down into parts.


I'm getting the following error in run time:



Caused by: android.database.sqlite.SQLiteException: no such column: Anniversary (code 1): , while compiling: SELECT * FROM special_days WHERE name = Anniversary
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:919)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:530)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1379)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1226)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1097)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1265)
at com.mycompany.dudesmyreminders.dbDataSource.queryToList(dbDataSource.java:147)
at com.mycompany.dudesmyreminders.Significant_OtherActivity.populateAnniv(Significant_OtherActivity.java:140)
...


The method causing the error:



public void populateAnniv() {
List<dbData> tempDBDatas;
tempDBDatas = datasource.queryToList(dbSDTable,null,
dbSDColumnName + " = " + dbSDFieldAnniv,
null,null,null,null);
if (tempDBDatas.size() > 0) {
dbDataAnniv = tempDBDatas.get(0);
} else {
dbDataAnniv = datasource.add_Row(dbSDFieldAnniv, dbSDTable, dbSDColumnName);
datasource.set_ColumnVal(dbDataAnniv, dbSDColumnDate, "10 29 1929");
datasource.set_ColumnVal(dbDataAnniv, dbSDColumnWarn, 10);
}
TextView textViewAnniv = ( TextView ) findViewById( R.id.SignificantOther_selectAnni);
textViewAnniv.setText(datasource.get_Column_StrVal(dbDataAnniv, dbSDColumnDate));

}

public List<dbData> queryToList(String myTable, String[] myColumns, String whereClause,
String[] whereArgs, String groupBy, String having, String orberBy) {
System.out.println("start queryToList");
List<dbData> dbDatas = new ArrayList<>();

Cursor cursor = database.query(myTable, myColumns,
whereClause, whereArgs, groupBy, having, orberBy);
System.out.println("cursor count = " + cursor.getCount());
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
dbData dbData = cursorToDB_Row(cursor, myTable);
dbData.setIntTemp1(0);
dbDatas.add(dbData);
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return dbDatas;

}


The variables used by the method:



private String dbSOTable = MySQLiteHelper.dbFields.TABLE_NAME_SIGNIFICANT_OTHER;
private String dbSOColumnName = MySQLiteHelper.dbFields.COLUMN_SIGNIFICANT_OTHER_NAME;
private String dbSDTable = MySQLiteHelper.dbFields.TABLE_NAME_SPECIAL_DAYS;
private String dbSDColumnName = MySQLiteHelper.dbFields.COLUMN_SPECIAL_DAYS_NAME;
private String dbSDFieldAnniv = MySQLiteHelper.dbFields.FIELD_SPECIAL_DAY_RESERVED_ANNIVERSARY;
private String dbSDFieldBirth = MySQLiteHelper.dbFields.FIELD_SPECIAL_DAY_RESERVED_BIRTHDAY;
private String dbSDColumnDate = MySQLiteHelper.dbFields.COLUMN_SPECIAL_DAYS_DATE;
private String dbSDColumnWarn = MySQLiteHelper.dbFields.COLUMN_SPECIAL_DAYS_WARNING;


From SQLiteHelper:



/* Inner class that defines the table contents */
public static abstract class dbFields implements BaseColumns {
//Special_Days Table Fields
public static final String TABLE_NAME_SPECIAL_DAYS = "special_days";
public static final String COLUMN_SPECIAL_DAYS_ID = _ID;
public static final String COLUMN_SPECIAL_DAYS_DATE = "date"; //dbDataRow strField 1
public static final String COLUMN_SPECIAL_DAYS_NAME = "name"; //dbDataRow dbData
public static final String COLUMN_SPECIAL_DAYS_ALTITUDE = "altitude"; //dbDataRow intField 1
public static final String COLUMN_SPECIAL_DAYS_USED = "is_used"; //dbDataRow Field 2
public static final String COLUMN_SPECIAL_DAYS_WARNING = "warning"; //dbDataRow intField 3
public static final String COLUMN_SPECIAL_DAYS_ACTION = "action"; //dbDataRow intField 4


}



//Database creation sql statement
private static final String SQL_CREATE_SPECIAL_DAYS =
"CREATE TABLE " + dbFields.TABLE_NAME_SPECIAL_DAYS + " (" +
dbFields.COLUMN_SPECIAL_DAYS_ID + INTEGER_PRIMARY_KEY + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_NAME + TEXT_TYPE + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_DATE + TEXT_TYPE + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_ALTITUDE + INTEGER_TYPE + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_USED + INTEGER_TYPE + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_WARNING + INTEGER_TYPE + COMMA_SEP +
dbFields.COLUMN_SPECIAL_DAYS_ACTION + INTEGER_TYPE +
// Any other options for the CREATE command
" )";

Aucun commentaire:

Enregistrer un commentaire