2011-02-14 95 views
2

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

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打开我的第一个表,但是当我检查数据库参展商在那里。

我错过了什么?

回答

4

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

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

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

+0

感谢您的回复,我将第一个链接作为我的DatabaseHelper类的基础,但我会尝试第二个链接来查看是否可以解决问题。 – user616076 2011-02-14 12:36:21

+0

第二个链接已经解决了这个问题,但我会接受建议并在启动时创建表并首次填充表以防止Apk太大。谢谢你的帮助。 – user616076 2011-02-14 12:49:45

1

使用SQLiteOpenHelper.onCreate()不会在您每次启动应用程序时创建新的数据库 - 而是会创建一个数据库(如果它尚不存在)。

这听起来像你可能有一个由你的助手创建的空数据库(如果根本没有数据库,我可能期望有一个不同的例外)以及你在Android之外创建的独立数据库。看起来你和你的应用程序不在同一个地方查看你的数据。

11

设置 - >应用程序 - >管理应用程序 - >(点击您的应用程序) - 当你在现有的数据库中创建新表的表犯规创建>清除数据

6

因为数据库处理程序的OnCreate功能将不每次都要调用,但只有在需要时(比如数据库未启动)。如果情况并非如此,那么您新创建的表格实际上并未创建。清除数据以强制数据库实例化自己。

0

hapend给我一次 更改DATABASE_VERSION

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

好运

0

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

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