0

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";

DBを作成するためのコードは次のとおりです。

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(?, ?, ?, ?);

他の2つのテーブル(PRODUTOSとCONCORRENTES)にアクセスするのに問題はなく、テーブルVENDEだけです。だから私の質問は:「oferta:」(3番目のエラー)はどこから来たのですか?DBの作成/アクセスが間違っていますか?これはSQLiteのせいではありませんね。(おそらくそうではありません..)

前もって感謝します

PS:それは私の最初の質問なので、何かを台無しにした場合は許してください...

4

1 に答える 1

0
KEY_VENDE_OFERTA + "INTEGER"

キーと単語の間にスペースを入れますINTEGER

KEY_VENDE_OFERTA + " INTEGER"
于 2012-07-17T14:27:51.357 に答える