В 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
Ничто в этом не имело смысла, так как таблица существовала с самого начала БД, поэтому мы пробовали разные вещи:
удаление приложения
клановый кеш/данные
изменение номера версии базы данных
принуждение к копированию базы данных, даже если она уже существовала
Ответ 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