我正在尝试创建此数据库,然后从中检索值,但我无法弄清楚语法。我整个周末一直在搜索谷歌,我疯了。请帮助我理解为什么这不起作用。这是SQLiteHelper:
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "DBName.db";
public static final String RESULTS_TABLE_NAME = "results";
public static final String RESULTS_COLUMN_ID = "id";
private static final String KEY_WEATHER = "weather";
private static final String KEY_WEEKEND = "weekend";
private static final String KEY_HOBBIES = "hobbies";
private static final String KEY_MUSIC = "music";
private static final String KEY_FAMILY = "family";
private static final String[] columnArray = {KEY_WEATHER, KEY_WEEKEND, KEY_HOBBIES, KEY_MUSIC, KEY_FAMILY};
private HashMap hp;
public DBHelper(Context context){
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("create db", "created database");
db.execSQL("CREATE TABLE results "+
"(id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"weather0 INTEGER, weather1 INTEGER, weather2 INTEGER, weather3 INTEGER, weather4 INTEGER, " +
"weekend0 INTEGER, weekend1 INTEGER, weekend2 INTEGER, weekend3 INTEGER, weekend4 INTEGER, " +
"hobbies0 INTEGER, hobbies1 INTEGER, hobbies2 INTEGER, hobbies3 INTEGER, hobbies4 INTEGER, " +
"music0 INTEGER, music1 INTEGER, music2 INTEGER, music3 INTEGER, music4 INTEGER, " +
"family0 INTEGER, family1 INTEGER, family2 INTEGER, family3 INTEGER, family4 INTEGER );");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLES IF EXISTS results");
this.onCreate(db);
}
public boolean insertResult (String[] topics){
//String topicUnitId = column+unitId;
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
/*for(int topicLoop = 0; topicLoop < topics.length; topicLoop++){
for(int unitLoop = 0; unitLoop < 5; unitLoop++){
contentValues.put(topics[topicLoop].toLowerCase(), -1);
Log.d("CREATING TABLE", topics[topicLoop]+unitLoop);
}
}*/
values.put("weather0", -1);
values.put("weather1", -1);
values.put("weather2", -1);
values.put("weather3", -1);
values.put("weather4", -1);
db.insert(RESULTS_TABLE_NAME, null, values);
db.close();
return true;
}
public ArrayList getAllResults(int i){
String arrayId = columnArray[i];
ArrayList arrayList = new ArrayList();
SQLiteDatabase db = this.getReadableDatabase();
for(int n = 0; n <= 4; n++) {
Cursor res = db.rawQuery("SELECT * FROM results WHERE " + arrayId + n +" IS NOT NULL;", null);
res.moveToFirst();
while (res.isAfterLast() == false) {
arrayList.add(res.getString(res.getColumnIndex(arrayId+n)));
res.moveToNext();
}
res.close();
}
db.close();
return arrayList;
}
}
我收到此错误:
android.database.sqlite.SQLiteException: no such column: weather0 (code 1): , while compiling: SELECT * FROM results WHERE weather0 IS NOT NULL;
当我尝试从我的应用程序中的另一个活动运行“getAllResults()”时。
感谢您的帮助。
答案 0 :(得分:1)
您可能会看到此错误,因为您已使用一个架构创建了数据库,然后修改了架构并再次运行该应用程序。初始数据库文件将保留在设备上,除非您增加数据库版本号,否则不会使用新架构重新创建。
数据库版本号在SQLiteOpenHelper构造函数的调用中设置。
super(context, DATABASE_NAME, null, 1);
或者,您可以从模拟器中卸载应用程序或选择其他数据库文件名,并在下次执行时重新创建数据库。
答案 1 :(得分:0)
可能您已经创建了数据库,然后尝试更改它。
解决方案: 从设备中删除您的应用程序或在以下位置将数据库版本从1更改为其他:
super(context, DATABASE_NAME, null, DATABASE_VERSION);