android .database.sqlite.SQLiteException: нет такой таблицы: SimpleTable (код 1 SQLITE_ERROR [1]): при компиляции: SELECT * FROM SimpleTable - PullRequest
1 голос
/ 24 апреля 2020

Я перепробовал все решения, которые смог найти, и до сих пор не смог обойти эту ошибку. Ошибка возникает в разделе getNotes (), в его четвертой строке. Кроме того, getNote () в настоящее время ничего не делает, так что вам не нужно смотреть на это. Я непосредственно скопировал весь код из этих руководств на YouTube, который затем адаптировал к своим потребностям.

https://www.youtube.com/watch?v=pa_lghjVQVA&t=933s

Спасибо за любую помощь.


import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.provider.ContactsContract;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class NoteDatabase extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_NAME = "SimpleDB";
    private static final String TABLE_NAME = "SimpleTable";

    //nome das colunas da tabela
    private static final String KEY_ID = "_id";
    private static final String KEY_TITLE = "title";
    private static final String KEY_LOCATION = "location";
    private static final String KEY_STARS = "stars";
    private static final String KEY_OPENING_HOURS_1 = "opening_hours_1";
    private static final String KEY_OPENING_HOURS_2 = "opening_hours_2";
    private static final String KEY_OPENING_HOURS_3 = "opening_hours_3";
    private static final String KEY_NOTAS = "notas";

    public NoteDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        String createDB = "CREATE TABLE " + TABLE_NAME + " (" + KEY_ID + "INTEGER PRIMARY KEY," +
                KEY_TITLE + "TEXT," +
                KEY_LOCATION + "TEXT," +
                KEY_STARS + "TEXT," +
                KEY_OPENING_HOURS_1 + "TEXT," +
                KEY_OPENING_HOURS_2 + "TEXT," +
                KEY_OPENING_HOURS_3 + "TEXT," +
                KEY_NOTAS + "TEXT" + " )";
        db.execSQL(createDB);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion >= newVersion)
            return;
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }

    public long addNote(Note note) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues v = new ContentValues();
        v.put(KEY_TITLE, note.getTitle());
        v.put(KEY_LOCATION, note.getLocation());
        v.put(KEY_STARS, note.getStars());
        v.put(KEY_OPENING_HOURS_1, note.getOpening_hours_1());
        v.put(KEY_OPENING_HOURS_2, note.getOpening_hours_2());
        v.put(KEY_OPENING_HOURS_3, note.getOpening_hours_3());
        v.put(KEY_NOTAS, note.getNotas());

        long ID = db.insert(TABLE_NAME, null, v);
        Log.d("Inserted", "ID ->" + ID);
        return ID;
    }

    public Note getNote(long id) {
        //select * from database table where id=1
        SQLiteDatabase db = this.getWritableDatabase();
        String[] query = new String[]{KEY_ID, KEY_TITLE, KEY_STARS,
                KEY_OPENING_HOURS_1, KEY_OPENING_HOURS_2, KEY_OPENING_HOURS_3, KEY_NOTAS};
        Cursor cursor = db.query(TABLE_NAME, query, KEY_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        return new Note(cursor.getLong(0), cursor.getString(1), cursor.getString(2),
                cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6),
                cursor.getString(7));
    }



     public List<Note> getNotes() {
         SQLiteDatabase db = this.getReadableDatabase();
         List<Note> allNotes = new ArrayList<>();
         //select from databaseName
         String query = "SELECT * FROM " + TABLE_NAME;
         Cursor cursor = db.rawQuery(query, null);
         if (cursor.moveToFirst()) {
             do {
                 Note note = new Note();
                 note.setID(cursor.getLong(0));
                 note.setTitle(cursor.getString(1));
                 note.setLocation(cursor.getString(2));
                 note.setStars(cursor.getString(3));
                 note.setOpening_hours_1(cursor.getString(4));
                 note.setOpening_hours_2(cursor.getString(5));
                 note.setOpening_hours_3(cursor.getString(6));
                 note.setNotas(cursor.getString(7));

                 allNotes.add(note);

             } while (cursor.moveToNext());
         }

         return allNotes;
     }

}```

1 Ответ

0 голосов
/ 24 апреля 2020

Я предполагаю, что вы следили за видео, в котором шаг за шагом выстраивается обработка базы данных.

Я взял ваш код, добавил класс Note, чтобы он скомпилировался и немного поиграл с ним. Сам код работает нормально, однако вы (вероятно, из-за постепенных изменений кода) удалили таблицу, и она еще не была воссоздана. Таким образом, это всегда приведет к крейсу sh.

К счастью, это можно решить очень просто:

  • Либо переустановите приложение
  • , либо увеличив Версия базы данных

Если вы решите снова удалить и установить приложение, вы можете сбросить версию базы данных до 1.

Если вы решите увеличить версию базы данных, onUpgrade будет вызывается, который удалит таблицу (если она существует), а затем создаст ее заново (вызовя onCreate).

Как уже упоминалось в качестве комментария, SQL следует обработать Android с помощью Room в наше время. Я понимаю, что вы, вероятно, только начинаете, но как только вы поправитесь, вам обязательно стоит проверить номер. Это делает вещи намного проще.

Надеюсь, что это решит вашу проблему:)

...