В SQLite Android обнаружена ошибка "Нет такой таблицы"

Я пытаюсь узнать о базах данных SQLite, но я действительно ненавижу иметь дело с любыми серверными вещами, со страстью. Я уже бьюсь о стены с, казалось бы, простой проблемой.

Вот код, который, я думаю, имеет значение из класса DatabaseHelper

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "Library";

    public static final String TABLE_NAME = "books";
    public static final String TITLE = "title";
    public static final String AUTHOR = "author";
    public static final String ISBN = "isbn";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, isbn TEXT)");
    }


    public boolean insertBook(String title, String author, String isdn) {

        try {
            SQLiteDatabase db = getWritableDatabase();

            ContentValues cv = new ContentValues();
            cv.put(TITLE, title);
            cv.put(AUTHOR, author);
            cv.put(ISBN, isdn);

            db.insert(TABLE_NAME, null, cv);
            db.close();

            return true;
        } catch (Exception exp) {
            exp.printStackTrace();

            return false;
        }
    }
}

И это код в моей основной деятельности

dbHelper = new DatabaseHelper(this);

dbHelper.insertBook("Harry Potter", "JK", "1000");
dbHelper.insertBook("Hamlet", "Shakespeare", "500");

Eclipse сообщает мне, что в insertBook() произошла ошибка. Там написано, что no such table books:... Я понятия не имею, что я делаю не так здесь. Что делает его более расстраивающим, так это то, что всего за пару минут до того, как он заработал идеально, тогда (я думаю) я отбросил таблицу, и она просто создала ее снова по какой-либо причине, даже если этот код не изменился с тех пор, как я впервые его создал ( Я думаю...).

Ответы

Ответ 1

На вашем устройстве установлена ​​более старая версия базы данных, на которой есть (пустая) база данных, а не таблица книг. Если это вариант для вас, просто удалите и переустановите приложение.

Позже, когда вы хотите добавить новую таблицу в базу данных во время производства на устройствах конечного пользователя, но сохраните существующие данные, назначенный крючок для добавления новых таблиц, изменения схемы или обновления ваших данных - это onUpgrade вашего SQLiteOpenHelper.

Ответ 2

Я написал для этого структуру ORM. https://github.com/ahmetalpbalkan/orman

Вы можете легко писать приложения Android с помощью SQLite. Он использует ваши классы Java (в этом случае Book (Book)) как таблицы базы данных (сущности).

Он даже автоматически создает вашу таблицу, и вы просто скажете book1.insert(), done.

Ответ 3

Необходимо удалить приложение, а затем переустановить его. После этого он должен работать.

Ответ 4

попробуйте этот например, для вставки:

 public boolean insertBook(String title, String author, String isdn) {

        try {
            SQLiteDatabase db = getWritableDatabase();

            ContentValues cv = new ContentValues();
            cv.put(TITLE, title);
            cv.put(AUTHOR, author);
            cv.put(ISBN, isdn);

            ***try
             {
            db.insert(TABLE_NAME, null, cv);
}
 catch ( SQLiteException e)
        {
            onCreate(db);
  db.insert(TABLE_NAME, null, cv);
}***

            db.close();

            return true;
        } catch (Exception exp) {
            exp.printStackTrace();

            return false;
        }
    }

Ответ 5

Если по какой-то причине вы уронили таблицу, вы можете удалить базу данных, чтобы заставить приложение правильно воссоздать ее. Используйте adb shell и найдите базу данных в /data/data/[package_name]/databases/. Вы можете просто удалить файл.

Ответ 6

У меня была эта проблема, но очистка проекта не исправила ее.
Оказалось, что я прошел DATABASE_NAME вместо TABLE_NAME.

Ответ 7

Убедитесь, что onCreate метод onCreate. Я также сталкиваюсь с подобным типом проблемы при создании нескольких таблиц. Если вы создаете отдельный класс, убедитесь, что вы сначала очистили все данные хранилища вашего приложения, а затем снова запустили его. Это будет работать нормально для меня.

Ответ 8

Добавьте базу данных к имени вашей базы данных, как этот library.db

Ответ 9

Ничто в этом не имело смысла, так как таблица существовала с самого начала БД, поэтому мы пробовали разные вещи:

  1. удаление приложения

  2. клановый кеш/данные

  3. изменение номера версии базы данных

  4. принуждение к копированию базы данных, даже если она уже существовала

Ответ 10

db.execSQL(
    "CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, isbn TEXT)"
);

удалите пробел после имени таблицы, оно должно быть таким.

db.execSQL(
    "CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, isbn TEXT)"
);

Ответ 11

Насколько мне известно, вы должны добавить к пути к внешней базе данных, к которой вы обращаетесь в Sqliteopenhelper class, см. следующий фрагмент кода

public final static String DATABASE_PATH = "/data/data/com.example.shortcuts/databases/";
com.example.shortcuts=Your Package name