SQLite ›1 Код ошибки таблицы столбцов = 1

У меня проблема с созданием базы данных с 2 столбцами. В первом должно быть имя, а во втором номер. Создать базу данных имен не проблема, но когда я пытаюсь добавить второй столбец, я получаю сообщение об ошибке «I/Database (13531): возвращено sqlite: код ошибки = 1, msg = нет такого столбца: zahl»

мой код здесь

сначала менеджер

package my.studienarbeit.bestimmung.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatenbankManager extends SQLiteOpenHelper {

private static final String DB_NAME = "carbohydrates.db";
private static final int DB_VERSION = 1;

private static final String WEIGHT_CREATE = 
         "CREATE TABLE weight (" 
        + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
        +   "name TEXT NOT NULL, " +
    //  +   "zahl INTEGER" +
        ")";


public DatenbankManager(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(WEIGHT_CREATE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(DatenbankManager.class.getName(),
        "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS SCANITEM");
    onCreate(db);
}

}

и моя база данных:

package my.studienarbeit.bestimmung.database;

import my.studienarbeit.bestimmung.R;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class Datenbanken extends ListActivity {

private SQLiteDatabase mDatenbank;
private DatenbankManager mHelper;
/*/ private static final String WEIGHT_SELECT_RAW = 
        "SELECT _id, name, zahl FROM weight" ; //*/

//*/
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.daten_datenbanken);
    mHelper = new DatenbankManager(this);
    mHelper.getWritableDatabase();

}

@Override
protected void onPause() {
    super.onPause();
    mDatenbank.close();
    Toast.makeText(this, 
                 getResources().getString(R.string.tx_daten_datenbanken_db_geschlossen), 
            Toast.LENGTH_SHORT).show();
}

@Override
protected void onResume() {
    super.onResume();
    mDatenbank = mHelper.getWritableDatabase();
    Toast.makeText(
            this, 
            getResources().getString(
                    R.string.tx_daten_datenbanken_db_geoeffnet
                    ), 
            Toast.LENGTH_SHORT)
    .show();
    ladeDaten();

}

private void ladeDaten() {
     // Cursor weightCursor = mDatenbank.rawQuery(WEIGHT_SELECT_RAW, null);
Cursor weightCursor = mDatenbank.query("weight",
            new String [] {
                    "_id",
                    "name",
                //  "zahl",
            },
            null, null, null, null, null                
        ); 

    startManagingCursor(weightCursor);  
    SimpleCursorAdapter weightAdapter =
            new SimpleCursorAdapter(this, 
                    android.R.layout.simple_list_item_2, 
                    weightCursor, 
                    new String [] {
                    "name", 
                //  "zahl"
                    }, 
                    new int[] {
                        android.R.id.text1
                    }

            );

setListAdapter(weightAdapter);
}

public void onNavButtonClick(View view) {
    EditText et_c = 
            (EditText) findViewById(R.id.editText_name_c);
//  EditText et_w = 
    //      (EditText) findViewById(R.id.editText_weight_c);

    ContentValues werte = new ContentValues();
    werte.put("name", et_c.getText().toString());
//  werte.put("zahl", et_w.getText().toString());
    mDatenbank.insert("weight", null, werte);
    ladeDaten();
    et_c.setText("");
//  et_w.setText("");

Второй столбец сейчас не активен для функций отладки. Я очень надеюсь, что вы можете мне помочь. Я застрял на этом уже 3 дня...

Большое спасибо


person user1446175    schedule 09.06.2012    source источник


Ответы (1)


Если вы сначала создали таблицу без столбца «zahl», а затем добавили столбец «zahl» и перезапустили приложение, OpenHelper не выполнял «onCreate» снова с новыми значениями. Я предлагаю сначала удалить таблицу (в эмуляторе перейдите в «Настройки» > «Приложения» > «Ваше приложение» > нажмите кнопку «Очистить данные»), затем раскомментируйте строки «zahl» (особенно в DatenbankManager.java), затем перекомпилируйте + запустите. Запуск вашего приложения снова с пустой базой данных приведет к воссозданию таблицы со столбцом «zahl». Томас.

person TomTomZJ    schedule 09.06.2012
comment
пожалуйста, не стесняйтесь +1 к моему ответу ... немного более высокая репутация не повредит мне! :) Спасибо заранее! - person TomTomZJ; 01.05.2013