2011-07-21 40 views
5

我想在我的SD卡上创建一个数据库。每当我打电话SQLiteDatabase.openOrCreateDatabase我得到的错误:Android打开或创建数据库

07-21 13:33:17.587: ERROR/AndroidRuntime(5541): Caused by: android.database.sqlite.SQLiteException: unable to open database file

有谁知道什么可能会导致此?这里是代码我有我的数据库类的open()方法:

File sdcard = Environment.getExternalStorageDirectory(); 

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + Schema.DATABASE_NAME ; 

db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 
+1

作为一个侧面说明,你为什么要写数据库到SD卡,而不是/数据/数据? –

+0

如果数据中出现错误,我希望能够为用户提供支持。我实际上是从SQL Server数据库中提取数据,所以我希望能够检测和处理任何意外的数据。我想我可以创建一些类来从私有存储中导入和导出数据库。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

回答

8

在这一个可能的故障可能是因为您没有设置相应的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

但是存储数据上SD卡被认为是不安全的。因为每个有权在sd存储上存储数据的应用程序都可以访问数据库。

编辑:另一个可能的问题是外部存储可能不可用。您需要确保您的外部存储器目前可写入。一种方法是通过getExternalStorageState来确定状态(参见参考here)。

getExternalStorageState() returns MEDIA_SHARED if the media is present not mounted, and shared via USB mass storage. 

Reference。在这里检查状态也有一个stackoverflow帖子:Writing Text File to SD Card fails

+0

我已经在清单文件中设置了该权限集。这是针对非市场应用程序的,所以我不担心其他应用程序试图访问我的数据。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Environment.getExternalStorageState()==共享 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

这就是你的问题@ ==共享 – fyr