Android的Sqlite – “没有这样的表”的错误

我正在尝试学习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()方法中有一个错误。 它说“没有这样的桌子书……”。 我不知道我在这里做错了什么。 是什么让它更令人沮丧的是,只有几分钟才完成工作,然后(我认为)我放弃了表,它只是无论什么原因再次创build,即使这个代码没有改变,因为我第一次创build它(我认为…)。

任何帮助将不胜感激。

Solutions Collecting From Web of "Android的Sqlite – “没有这样的表”的错误"

在您的设备上有一个较旧版本的数据库,它具有(空)数据库,但没有书本表。 如果这是您的select,只需卸载并重新安装应用程序。

之后,当您希望在最终用户设备上进行生产时向数据库添加新表,但保留现有数据时,指定的挂钩添加新表,更改模式或升级数据是SQLiteOpenHelperonUpgrade方法。

我已经为此写了一个ORM框架。 https://github.com/ahmetalpbalkan/orman

你可以用SQLite轻松地编写Android应用程序。 它使用你的Java类(在本例中为Book)作为数据库表(实体)。

它甚至自动创build你的表格,你只需要说book1.insert() ,完成。

您必须卸载应用程序,然后重新安装它。 它应该在那之后工作。

尝试这个例如插入:

  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; } } 

如果由于某种原因,您删除了表,您可能需要删除数据库以强制应用程序正确地重新创build它。 使用adb shell并在/data/data/[package_name]/databases/find/data/data/[package_name]/databases/ 。 您可以删除该文件。

我有这个问题,但清理项目并没有解决。
事实certificate,我通过DATABASE_NAME而不是TABLE_NAME

 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)" );