2015-04-05 60 views
0

我在下面的SQL语句中收到错误。导致错误的方法是在下表所示的表中的“名称”列中查找具有“Anniversary”的行。如果找不到这样的行,它将添加一行。该错误似乎表明该表没有列“周年纪念”,但我不想查询列周年纪念,但我想查询列“名称”。完全困惑。任何帮助表示赞赏。对不起所有的代码,但这一切似乎相关,所以我试图将其分解成部分。Android sqlite查询给出的错误列确实不存在,当它肯定确实

我得到在运行时出现以下错误:

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) 
    ... 

的方法会导致错误:

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; 

来源:

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; 

} 

的方法使用的变量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 
       ")"; 

回答

1

,如果你在包装什么dbSDFieldAnniv '...'?

tempDBDatas = datasource.queryToList(dbSDTable,null, 
     dbSDColumnName + " = '" + dbSDFieldAnniv + "'", 
     null,null,null,null); 
+0

这么简单。谢谢。 – 2015-04-06 00:15:55

+0

@EdwardBagby乐于助人,包括我自己在内的许多人遇到的一种问题 – AndroidEx 2015-04-06 00:18:19

相关问题