Ошибка при добавлении в БД

346
27 января 2017, 05:47
public static final String TAG = DBHelper.class.getSimpleName();
public static final int DATEBASE_VERSION = 1;
public static final String DATEBASE_NAME = "ContactDB";
public static final String TABLE_CONTACT = "Contact";
public static final String KEY_ID = "ID";
public static final String KEY_NAME = "Name";
public static final String KEY_LOGIN = "Login";
public static final String KEY_PASS = "Pass";
public static int countUser = 0;
public DBHelper(Context context) {
    super(context, DATEBASE_NAME, null, DATEBASE_VERSION);
}
public static final String CREATE_TABLE_USERS = "CREATE TABLE " + TABLE_CONTACT + " ( "
        + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_NAME + " TEXT, "
        + KEY_LOGIN + " TEXT, "
        + KEY_PASS + " TEXT);";

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE_USERS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACT);
    onCreate(db);
}
@Override
public void addContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues value = new ContentValues();
    value.put(KEY_NAME, contact.getName());
    value.put(KEY_LOGIN, contact.getLogin());
    value.put(KEY_PASS, contact.getPass());
    Long id = db.insert(TABLE_CONTACT, null, value);
    db.close();
    Log.d(TAG, "user inserted" + id);
    countUser++;
}

Ошибка:

E/SQLiteLog: (1) table Contact has no column named Name
E/SQLiteDatabase: Error inserting Login=fediafedia@ Name=fedia Pass=ihgldihgld
    android.database.sqlite.SQLiteException: table Contact has no column named Name (code 1): , while compiling: INSERT INTO Contact(Login,Name,Pass) VALUES (?,?,?)
Answer 1

Скорее всего Вы создали таблицу, а потом в коде добавили еще какие-то поля, но не изменили версию базы данных.

Попробуйте повысить версию DATEBASE_VERSION – в этом случае, при подключении к базе данных, будет вызван метод onUpgrade(...), который удалит старую таблицу и создаст новую (при этом данные, хранящиеся в таблице будут потеряны).

Answer 2

Как версия, скорее всего SQLite ругается на имя поля Name. В руководстве SQLite сказано следующее:

For most SQL code, your safest bet is to never use any English language word as the name of a user-defined object.

Ну то есть в качестве наименование ваших объектов/сущностей лучше не использовать вообще любые английские слова.

Я бы переименовал:

public static final String KEY_NAME = "field_name";

Ну и заодно, чтобы 2 раза не вставать в Android по умолчанию ключевое поле должно называться _ID (с лидирующим символом подчеркивания)

READ ALSO
Проблема с использованием иконок

Проблема с использованием иконок

Я сделал NavigationDrawer с помощью MaterialDrawer от Mike PenzОн отлично работает, но когда я пытаюсь заменить значки "FontAwesome" на "GoogleMaterial" или другие получаю...

313
FBX binary как прочитать?

FBX binary как прочитать?

мне нужно прочтитать именно fbx binary(не предлагать fbx ascii)(хотел написать конвертер именно для java)

365
Как вытащить из базы имя пользователя

Как вытащить из базы имя пользователя

Я сделал регистрацию, запихнул данные в sqlite, потом сделал вход, где проверял все данные с таблице, если пароль правильный, то пользователь...

419