【问题标题】:SQLiteException: no such tableSQLiteException:没有这样的表
【发布时间】:2011-02-14 11:02:34
【问题描述】:

我使用的是我自己的 SQLite3 数据库,而不是每次运行我的应用程序时都创建一个新数据库,因为我有几个表,其中包含我试图显示的静态数据。我创建了我的数据库并将其放在我的资产文件夹中。然后我创建了我的数据库助手,当我启动我的应用程序时,我可以毫无问题地打开我的数据库,但是当我尝试使用以下代码打开我的第一个表时

private Cursor getData() 
{
    try
    {
        myDbHelper = new DatabaseHelper(this);
        SQLiteDatabase db = myDbHelper.getReadableDatabase();
        Cursor cursor = db.query("exhibitor", FROM, null, null, null,null, ORDER_BY);
        startManagingCursor(cursor);
        return cursor;
    }
    catch(SQLiteException e)
    {
        String err = e.toString();
        return null;
    }
}


它会抛出一个错误,说 android.database.sqlite.SQLiteException: no such table: exhibitor: , while compiling: SELECT _id, EXHIBITOR FROM exhibitor ORDER BY EXHIBITOR 但是当我检查数据库参展商时。

我错过了什么?

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    设置->应用程序->管理应用程序->(单击您的应用程序)->清除数据

    【讨论】:

      【解决方案2】:

      每当您在现有数据库中创建新表时,该表不会创建,因为不会每次都调用数据库处理程序的 OnCreate 函数,而只会在需要时调用(例如数据库未启动)。如果不是这种情况,您新创建的表实际上还没有创建。清除数据强制db实例化自己。

      【讨论】:

        【解决方案3】:

        您是否已将数据库从资产文件夹移至模拟器上的/data/data/YOUR_PACKAGE/databases/

        This is a good detailed post 关于将数据库移动到/data/data/YOUR_PACKAGE/databases/(如果它不存在)。

        Here 是另一个简短的解决方案。

        【讨论】:

        • 感谢您的回复,我使用第一个链接作为我的 DatabaseHelper 类的基础,但我会尝试第二个链接,看看是否能解决问题。
        • 第二个链接已经解决了问题,但我会采纳建议,在启动时创建表并第一次填充表,以防止 Apk 太大。感谢您的帮助。
        【解决方案4】:

        清除数据并从您的设备中卸载应用程序并在设备中重新安装应用程序...

        Settings -> Applications -> Manage Applications -> Your Application Name -> Clear data
        

        【讨论】:

          【解决方案5】:

          使用SQLiteOpenHelper.onCreate() 不会在您的应用每次启动时都创建一个新数据库,而是在数据库不存在时创建一个。

          听起来您可能有一个由您的助手或为您的助手创建的空数据库(如果根本没有数据库,我可能会期待一个不同的例外),以及您在 Android 之外创建的单独数据库。您和您的应用似乎不在同一个地方查找您的数据。

          【讨论】:

          • 感谢您的回复,您是正确的。我现在已经通过在启动时创建数据库并在第一次加载应用程序时填充数据来解决这个问题,以防止 Apk 太大。
          【解决方案6】:

          仅清除数据对我不起作用。

          有效的是:

          • 卸载应用程序
          • 重启设备或模拟器
          • 禁用即时运行(不仅是主组,还有所有单独的即时运行设置)
          • 构建 -> 清理项目
          • 构建 -> 重建项目

          【讨论】:

            【解决方案7】:

            曾经发生在我身上 更改您的 DATABASE_VERSION

            如果你的 DATABASE_VERSION =1 它只会看到三个表 如果你的 DATABASE_VERSION = 2 它只会看到更多的表,但我真的不知道有多少

            祝你好运

            【讨论】:

              【解决方案8】:

              我只是犯了一个简单的错误。

              原因:

              解决方案:

              【讨论】:

                【解决方案9】:

                刚刚发生在我身上。我不完全知道为什么,但是将 DB_VERSION 属性更改为更大的数字使其工作。问题是:每次我更改数据库的字段(SQLiteDB 类的属性)时,我都需要更改该数字。

                【讨论】:

                • 如何更改db_version?
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多