Android SQLiteException:没有这样的表
我正在使用我自己的SQLite3数据库,而不是每次我的应用程序运行时都创建一个新的数据库,因为我有几个表,其中包含我试图显示的静态数据。我创建了我的数据库并将其放在我的资产文件夹中。然后我创建了我的数据库助手,当我启动我的应用程序时,我可以毫无问题地打开我的数据库,但当我尝试使用以下代码打开我的第一个表时Android SQLiteException:没有这样的表,android,database,sqlite,Android,Database,Sqlite,我正在使用我自己的SQLite3数据库,而不是每次我的应用程序运行时都创建一个新的数据库,因为我有几个表,其中包含我试图显示的静态数据。我创建了我的数据库并将其放在我的资产文件夹中。然后我创建了我的数据库助手,当我启动我的应用程序时,我可以毫无问题地打开我的数据库,但当我尝试使用以下代码打开我的第一个表时 private Cursor getData() { try { myDbHelper = new DatabaseHelper(this);
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;
}
}
它会抛出一个错误,即:编译时没有这样的表:参展商:,编译时:选择参展商id,参展商订单中的参展商但当我检查数据库参展商是否存在时。
我缺少什么?您是否已将数据库从assets文件夹移动到emulator上的
/data/data/YOUR_PACKAGE/databases/
关于将数据库移动到/data/data/YOUR_PACKAGE/databases/
(如果不存在)
是另一个简短而简单的解决方案。使用
SQLiteOpenHelper.onCreate()
不会在每次应用程序启动时创建新数据库,而是在数据库不存在时创建数据库
听起来你可能有一个由你的助手创建的空数据库(如果根本没有数据库,我可能会期待一个不同的例外),还有你在Android之外创建的单独数据库。看起来您和您的应用程序没有在同一位置查找数据。设置->应用程序->管理应用程序->(单击您的应用程序)->清除数据无论何时在现有数据库中创建新表,该表都不会创建,因为数据库处理程序的OnCreate函数不会每次调用,而是仅在需要时调用(如数据库未启动)。如果情况并非如此,则新创建的表实际上尚未创建。清除数据以强制数据库自身实例化。向我发送一次 更改您的数据库版本 如果数据库_VERSION=1,它将只看到三个表 如果您的数据库_VERSION=2,它将看到更多的表,但我真的不知道有多少
祝您好运清除数据并从设备中卸载应用程序,然后在设备中重新安装应用程序
Settings -> Applications -> Manage Applications -> Your Application Name -> Clear data
仅仅清除数据对我来说不起作用 起作用的是:
- 卸载应用程序
- 重新启动设备或模拟器
- 禁用即时运行(不仅仅是主组,而是所有单个即时运行设置)
- 构建->清洁项目
- 构建->重建项目
- 我只是犯了一个简单的错误
原因:
解决方案:
刚刚发生在我身上。我不知道为什么,但将DB_VERSION属性更改为更大的数字使其工作。问题是:每次我更改DB的字段(SQLiteDB类的属性)时,我都需要更改该数字。谢谢您的回复,我使用了第一个链接作为我的数据库助手类的基础,但是我会尝试第二个链接来查看是否解决了这个问题。第二个链接已经解决了这个问题,但是我会采纳建议并在启动时创建表并首次填充表以防止APK过大。谢谢你的帮助。谢谢你的回复,你是对的。我现在已经解决了这个问题,在启动时创建数据库,并在第一次加载应用程序时填充数据,以防止Apk过大。如何更改db_版本?