2012-07-17 45 views
0

我似乎無法訪問SQLite數據庫表。當試圖這樣做時,它說表不存在。我搜索了有相同問題的人,仔細檢查了我的代碼,但找不到問題。Android SQLite:無法訪問現有表上的列

一些定義:

private static final String TABLE_PRODUTOS = "produtos"; 
private static final String TABLE_CONCORRENTES = "concorrentes"; 
private static final String TABLE_VENDE = "vende"; 

private static final String KEY_ID_PROD = "_id"; 
private static final String KEY_NOME_PROD = "nome_prod"; 
private static final String KEY_CODBAR_PROD = "codbar_prod"; 
private static final String KEY_ID_CONC = "_id"; 
private static final String KEY_NOME_CONC = "nome_conc"; 
private static final String KEY_VENDE_PROD_ID = "prod_id"; 
private static final String KEY_VENDE_CONC_ID = "conc_id"; 
private static final String KEY_VENDE_PRECO = "preco"; 
private static final String KEY_VENDE_OFERTA = "oferta"; 

下面是創建數據庫的代碼:

public void onCreate(SQLiteDatabase db) { 

    Log.i("DB","CREATING_DB"); 

    String CREATE_TABLE_PRODUTOS = "CREATE TABLE " + TABLE_PRODUTOS + "(" 
      + KEY_ID_PROD + " INTEGER PRIMARY KEY," + KEY_NOME_PROD + " TEXT," + KEY_CODBAR_PROD + " INTEGER" + ")"; 
    String CREATE_TABLE_CONCORRENTES = "CREATE TABLE " + TABLE_CONCORRENTES 
      + "(" + KEY_ID_CONC + " INTEGER PRIMARY KEY," + KEY_NOME_CONC + " TEXT" + ")"; 
    String CREATE_TABLE_VENDE = "CREATE TABLE " + TABLE_VENDE + "(" 
      + KEY_VENDE_PROD_ID + " INTEGER," + KEY_VENDE_CONC_ID 
      + " INTEGER," + KEY_VENDE_PRECO + " REAL," 
      + KEY_VENDE_OFERTA + "INTEGER" + ")"; 

    db.execSQL(CREATE_TABLE_PRODUTOS); 
    db.execSQL(CREATE_TABLE_CONCORRENTES); 
    db.execSQL(CREATE_TABLE_VENDE); 
} 

下面的代碼插入/更新:

public void addVenda_(Venda p_) { 
    //bd is my SQLiteDatabase 
    if (bd != null && bd.isOpen()) { 
    //Log.i("CLOSING_DB", "addVenda"); 
     bd.close(); 
    } 
    bd = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_VENDE_PRECO, p_.preco); // Contact Name 
    values.put(KEY_VENDE_OFERTA, p_.oferta); // Contact Name 

    if(getVenda_(p_)){ //getVenda() returns true if row with KEY_VENDE_PROD_ID and KEY_VENDE_CONC_ID already exist 
     //Log.i("UPDATE","conc: "+p_.id_conc+" prod: "+p_.id_prod+" preço: "+p_.preco+" oferta: "+p_.oferta); 
     bd.update(TABLE_VENDE, values, KEY_VENDE_PROD_ID + " = ? AND "+KEY_VENDE_CONC_ID + " = ?", new String[]{ "" + p_.id_prod, "" + p_.id_conc }); 
     //bd.rawQuery("update "+TABLE_VENDE+" SET "+KEY_VENDE_PRECO+"="+p_.preco+", "+KEY_VENDE_OFERTA+"="+p_.oferta+" WHERE "+KEY_VENDE_PROD_ID+"="+p_.id_prod+" AND "+KEY_VENDE_CONC_ID+"="+p_.id_conc, null); 
    } 
    else{ 
     //Log.i("INSERT","conc: "+p_.id_conc+" prod: "+p_.id_prod+" preço: "+p_.preco+" oferta: "+p_.oferta); 
     values.put(KEY_VENDE_PROD_ID, p_.id_prod); 
     values.put(KEY_VENDE_CONC_ID, p_.id_conc); 
     bd.insert(TABLE_VENDE, null, values); 
     //String sql = "INSERT INTO vende(prod_id, conc_id, preco, oferta) values ("+ p_.id_prod+","+p_.id_conc+","+p_.preco+","+p_.oferta +");"; 
     //bd.rawQuery(sql, null); 

    } 

} 

這裏是我得到時錯誤試圖在TABLE_VENDE上插入一些值:

sqlite returned: error code = 1, msg = table vende has no column named oferta 
Error inserting oferta=0 conc_id=1 preco=1.42 prod_id=3 
android.database.sqlite.SQLiteException: table vende has no column named oferta: , while compiling: INSERT INTO vende(oferta, conc_id, preco, prod_id) VALUES(?, ?, ?, ?); 

我沒有訪問其他兩個表(PRODUTOS和CONCORRENTES),只是表VENDE的問題。 所以我的問題是: 「oferta:」(第三個錯誤)是從哪裏來的? 我創建/訪問我的數據庫錯了嗎? 這不可能是SQLite的錯,可以嗎? (可能不是..)

在此先感謝

PS:這是我的第一個問題,所以請原諒我,如果我擺烏龍......

回答

0
KEY_VENDE_OFERTA + "INTEGER" 

離開鍵和之間的空間字INTEGER

KEY_VENDE_OFERTA + " INTEGER" 
+0

就是這樣。謝謝。我不能相信我花了兩個小時看着它,卻沒有看到它...... – user1531978 2012-07-17 14:44:01