簡體   English   中英

android:java.lang.illegalargumentexception列'details'不存在

[英]android: java.lang.illegalargumentexception column 'details' does not exists

我看到有關_id問題的許多問題,但我的問題是數據庫創建查詢中定義的其他列...

public class DatabaseHelper extends SQLiteOpenHelper{

    static final String dbName="Shadows";
    static final String pages="pages";
    static final String pages_id="_id";
    static final String date="date";
    static final String details="details";

    public DatabaseHelper(Context context) {
        super(context, dbName, null, 33);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS pages (_id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT, details TEXT);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+pages);
        onCreate(db);
    } 


    public Cursor getallPages(){
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor c=db.rawQuery("SELECT * FROM PAGES", new String[] {});
        return c;
    }
}

現在在調用此getPages()函數之后,使用了簡單的游標適配器。

String[] from = new String[]{
    DatabaseHelper.pages_id,
    DatabaseHelper.date,
    DatabaseHelper.details
};
int[] to = new int[]{R.id.id,R.id.name,R.id.mail};
SimpleCursorAdapter sca = new SimpleCursorAdapter(
    this,R.layout.gridview,c,from,to
);

出現錯誤“列詳細信息不存在”。

兩件事情。

您應該在SQL構造函數中使用最終的靜態字段詳細信息-這將使您免於犯任何輕微的錯字。

db.execSQL("CREATE TABLE IF NOT EXISTS "+pages+" ("+pages_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+date+" TEXT, "+details+" TEXT);");

而從選擇

 Cursor c=db.rawQuery("SELECT * FROM "+pages, new String[] {});

這是一個好習慣,也意味着如果您決定更改某些內容,它將自動得到處理。

但是最有可能的原因是數據庫(和表)已經存在,但是格式不同-如果您最近更改了代碼以添加或重命名詳細信息列,則此代碼不會刪除並重新創建表。

最簡單的測試-只需從設備中清除該應用程序的數據,然后再次運行即可-看起來您已經在增加數據庫版本來執行相同的操作,所以確定要這樣做嗎?

除了有故障的現有數據庫外,這看起來應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM