Ошибка базы данных в Android из-за метода создания

#java #android

#java #Android

Вопрос:

Я получаю эту ошибку logcat:

Вызвано: android.database.sqlite.Исключение SQLiteException: нет такого столбца: id (код 1): , при компиляции: ВЫБЕРИТЕ * Из заметок, ГДЕ id = 0

Это мой код:

 public static final String dbName="notesDb";
public static final Integer DB_version=1;

public static final String key_id="id";
public static final String key_title="title";
public static final String key_subject="subject";

public static final String Table_notes="notes";
  

общедоступные примечания к базе данных (контекст context) {
супер (контекст, dbName, null, DB_version);

 }


@Override
public void onCreate(SQLiteDatabase db) {
    String create_table="create table " Table_notes "(" key_id "Integer primary key," key_title " varchar(30), " key_subject " varchar(50)) ";
    db.execSQL(create_table);
}

public Note getNoteByID(int id){
    Note note=null;
    SQLiteDatabase db=this.getReadableDatabase();
    String selectQuery="SELECT * FROM " Table_notes " WHERE " key_id "=" id;
    Cursor cursor=db.rawQuery(selectQuery,null);
    if (cursor.moveToFirst()){
        String title=cursor.getString(cursor.getColumnIndex(key_title));
        String subject=cursor.getString(cursor.getColumnIndex(key_subject));
        int id_item=cursor.getInt(cursor.getColumnIndex(key_id));
        note=new Note(title,subject,id_item);
    }
    cursor.close();
    return note;
}
  

Как я могу это решить?

Комментарии:

1. Какая часть ошибки вас смущает? В таблице notes нет столбца с именем id .

2. public void onCreate (база данных SQLiteDatabase db) { String create_table=»create table » Table_notes «(» key_id «Целочисленный первичный ключ», key_title » varchar(30)», key_subject «varchar(50))»; db.ExecSQL(create_table); } Есть ли ошибка в методе create?

3. Как я уже сказал, в таблице нет столбца с именем id . Поскольку вы пропускаете пробел между id и Integer , у вас есть столбец с именем idInteger без объявленного типа. Проголосовали за закрытие, поскольку проблема вызвана простой типографской ошибкой.

Ответ №1:

Ошибка в вашем Create запросе, вам необходимо указать соответствующий пробел после имени столбца.

"create table " Table_notes "(" key_id " Integer primary key," // you missed space before Integer

Таким образом, sqlite создаст ваш столбец с именем idInteger , а не id без него, вы можете попробовать использовать запрос select, сославшись на id столбец как idInteger .

Комментарии:

1. Я получил ту же ошибку после добавления пробела (нет такого столбца: id (код 1): , при компиляции: ВЫБЕРИТЕ * ИЗ заметок, ГДЕ id = 0)