2011-11-08 44 views
0

我有一些奇怪的行为。 如果数据库中不存在的,我在我的活动执行以下代码:数据库已存在时创建新表的问题

listOpenHelper = new ListOpenHelper(ManageListActivity.this); 
db = listOpenHelper.getReadableDatabase(); 
Cursor cursor = db.query(ListOpenHelper.TABLE_NAME, null, null, null, null, null, BaseColumns._ID + " DESC"); 

该数据库在这里创建并创建表列表,没有问题。

问题是,当我尝试在其他活动来执行一个类似的块:

productListOpenHelper = new ProductListOpenHelper(ProductListActivity.this); 
db = productListOpenHelper.getReadableDatabase(); 
Cursor cursor = db.query(ProductListOpenHelper.TABLE_NAME, null, null, null, null, null, ProductListOpenHelper.NAME + " ASC"); 

在这种情况下,我得到的例外“android.database.sqlite.SQLiteException:没有这样的表:表:,同时编译:SELECT * FROM list ORDER BY _id DESC“

如果我删除数据库并执行第一个上述块,并在第一个块之后,错误将在productlist表中。

我需要在第一次执行中创建所有我的表? 我喜欢在用户输入每个活动时创建表格,有一些很好的方法可以做到这一点?

谢谢!

+0

每次用户打开另一个活动时,为什么要删除并重新创建表格?数据库的全部目的是......存储数据。 – Jack

+0

我没有删除并重新创建,我创建了一次,问题是当我尝试在现有数据库中创建另一个表时。 –

回答

0

你有两个不同的数据库,对吗?如果没有,你可能不应该有两个不同的助手类。

此外,创建助手,因为你是可能不理想。见博客文章:

http://www.touchlab.co/blog/single-sqlite-connection/

请张贴代码为您的辅助类,为什么你有两个不同的班级。

+0

谢谢凯文!我只有一个数据库,我会阅读你发布的这个网站,以了解如何创建数据库的更好,如果我有一些问题,我从我的助手的这里发布代码。 –

0

为什么你使用两个不同的助手?我不认为它是一个好方法...你可以在最初创建表,并且你可以随时获得数据库,只需一个帮助器。