it-swarm.com.ru

В 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: .... Я понятия не имею, что я делаю не так здесь. Что делает его более расстраивающим, так это то, что всего за пару минут до того, как он заработал идеально, тогда (я думаю) я отбросил таблицу, и она просто создала ее снова по какой-либо причине, даже если этот код не изменился с тех пор, как я впервые его создал ( Я думаю...).

11
Mark D

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

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

38
Thilo-Alexander Ginkel

Я написал ORM-фреймворк для этого. https://github.com/ahmetalpbalkan/orman

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

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

5
AhmetB - Google

Вы должны удалить приложение, а затем переустановить его. Это должно работать после этого.

2
Faraz Ahmed

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

 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;
        }
    }
1
Ali Ziaee

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

0
Matthieu

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

0
Manish Bansal

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

0
Destiner