我正在尝试开发我的应用,以便它使用数据库存储有关图书的数据。 我对android和 SQLite 的了解最多,所以我的代码可能看起来很尴尬。当我尝试运行应用程序时,出现错误,说明
引起:android.database.sqlite.SQLiteException:没有这样的表: Library_Table(代码1):,编译时:SELECT _id,Book_Title, 作者,长度,Chapters_Read,Date_Added FROM Library_Table ORDER BY Date_Added DESC
我相信当我调用命令查询数据库时会出现问题;我确定我做得不对,但经过几周的调试后,我即将放弃。我将添加我认为对问题很重要的代码的几个部分。
我相信第一部分创建了表(它发生在扩展sqliteopenhelper的类中):
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_LIBRARY_TABLE = "CREATE TABLE " + Constants.TABLE_NAME
+ "("
+ Constants.KEY_ID + " INTEGER PRIMARY KEY,"
+ Constants.TITLE_NAME + " TEXT,"
+ Constants.BOOK_AUTHOR + " TEXT,"
+ Constants.BOOK_LENGTH + " INTEGER,"
+ Constants.CHAPTERS_READ + " INTEGER,"
+ Constants.DATE_ADDED + " TEXT"
+ ");";
sqLiteDatabase.execSQL(CREATE_LIBRARY_TABLE);
}
下一部分也会出现扩展SQLitesOpenHelper的类 (行Cursor cursor = database.query;由android studio高亮显示为有问题):
public ArrayList<Book> getBooks(){
String selectQuery = "SELECT * FROM " + Constants.TABLE_NAME;
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(
Constants.TABLE_NAME,
new String[]{
Constants.KEY_ID,
Constants.TITLE_NAME,
Constants.BOOK_AUTHOR,
Constants.BOOK_LENGTH,
Constants.CHAPTERS_READ,
Constants.DATE_ADDED},
null, null, null, null,
Constants.DATE_ADDED + " DESC");
这是Constants类(在单独的文件中):
public class Constants {
public static final String DATABASE_NAME = "LibraryDB";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "Library_Table";
public static final String KEY_ID = "_id";
public static final String TITLE_NAME = "Book_Title";
public static final String BOOK_AUTHOR = "Author";
public static final String BOOK_LENGTH = "Length";
public final static String CHAPTERS_READ = "Chapters_Read";
public static final String DATE_ADDED = "Date_Added";
}
我认为真正的问题是我不能特别了解这个问题;我怀疑这不是一个很难解决的问题。
答案 0 :(得分:0)
如果您在设备上安装的应用已经安装了SQLite数据库,则不会调用SQLiteOpenHelper#onCreate
。
这是一个通常使用从应用程序的一个版本迁移到另一个版本的数据库来解决的问题。
如果您未更新以前版本的应用,请卸载当前版本,然后再将应用推送到手机。如果要更新以前的版本,则需要使用SQLiteOpenHelper#onUpgrade
迁移数据库。
更多信息here。