android中的sqlite3_open错误
Posted
技术标签:
【中文标题】android中的sqlite3_open错误【英文标题】:sqlite3_open error in android 【发布时间】:2012-08-13 14:44:55 【问题描述】: public class DataBaseHelper extends SQLiteOpenHelper
private static String DB_NAME;
private static String DB_PATH = "/data/data/com.muthu.tamil/databases/";
private final Context myContext;
private SQLiteDatabase myDataBase;
static
DB_NAME = "aathichudi.db";
public DataBaseHelper(Context paramContext)
super(paramContext, DB_NAME, null, 1);
DB_PATH = "/data/data/" + paramContext.getPackageName() + "/databases/";
this.myContext = paramContext;
private boolean checkDataBase()
return new File(DB_PATH + DB_NAME).exists();
private void copyDataBase()
throws IOException
InputStream localInputStream = this.myContext.getAssets().open(DB_NAME);
FileOutputStream localFileOutputStream = new FileOutputStream(DB_PATH + DB_NAME);
byte[] arrayOfByte = new byte[1024];
while (true)
int i = localInputStream.read(arrayOfByte);
if (i <= 0)
localFileOutputStream.flush();
localFileOutputStream.close();
localInputStream.close();
return;
localFileOutputStream.write(arrayOfByte, 0, i);
public void createDataBase()
throws IOException
if (checkDataBase())
new File(DB_PATH + DB_NAME).delete();
getReadableDatabase();
close();
try
copyDataBase();
return;
catch (IOException localIOException)
throw new Error("Error copying database");
public Cursor getData(String paramString)
return this.myDataBase.rawQuery(paramString, null);
public void onCreate(SQLiteDatabase paramSQLiteDatabase)
public void onUpgrade(SQLiteDatabase paramSQLiteDatabase, int paramInt1, int paramInt2)
public void openDataBase()
throws SQLException
this.myDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, 1);
我在 android 中为 db 连接编写代码,但我得到这样的错误:
sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL) 失败 sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL) 失败 sqlite 返回:错误代码 = 14,msg = 无法在源代码行 25467 打开文件 sqlite3_open_v2("/data/data//data/data/com.muthu.tamil/files/databases/aathichudi.db", &handle, 1, NULL) 失败 关闭虚拟机 threadid=1:线程以未捕获的异常退出(组=0x4001d800) 致命例外:主要 java.lang.RuntimeException:无法启动活动 ComponentInfocom.muthu.tamil/com.muthu.tamil.HomeActivity:android.database.sqlite.SQLiteException:无法打开数据库文件 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread.main(ActivityThread.java:4627) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 在 dalvik.system.NativeStart.main(本机方法) 引起:android.database.sqlite.SQLiteException:无法打开数据库文件 在 android.database.sqlite.SQLiteDatabase.dbopen(本机方法) 在 android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1812) 在 android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) 在 com.muthu.tamil.sql.DataBaseHelper.openDataBase(DataBaseHelper.java:112) 在 com.muthu.tamil.HomeActivity.onCreate(HomeActivity.java:41) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) ... 11 更多
【问题讨论】:
你是想将数据库复制到文件中还是什么?? 我尝试将文件信息复制到数据库中 在构造函数中,您将DB_PATH
设置为带有com.muthu,tamil
的东西,这似乎是错误的——请注意muthu
后面的逗号。但是,您不应在代码中使用硬编码的绝对路径。请改用paramContext.getFilesDir()
。
你能从 LogCat 发布完整的错误日志吗
@cyroxx 我试试 paramContext.getPackageName() 但我得到了同样的错误
【参考方案1】:
sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL)
failed sqlite returned: error code = 14, msg = cannot open file at source line 25467
仅当您的数据库不是在模拟器或设备中创建时才会产生此错误。您可以检查您的数据库是否在您的 IDE DDMS/file_explorer (/data/data/Ur_pkg_name/databases/ur_db_name) 中创建。
报告了一个与此问题相关的错误:http://code.google.com/p/android/issues/detail?id=949
我遇到了人们提出的几种解决方案/变通办法,包括以下内容:
如果您在 Manifest 文件中使用 sharedUserId,则更改应用程序的 sharedUserId 并重新安装该应用程序可能会起作用,因为它没有写入 SQLite 数据库所需的所有权。
编辑清单文件可以再次消除错误。在清单中,确保您输入了正确的 min sdk 版本。您可以通过检查清单文件来确定您的最低 SDK 版本是否正常,如果代码的左列中有一个感叹号指示您的错误。
我希望这些解决方案之一也适合您。
【讨论】:
以上是关于android中的sqlite3_open错误的主要内容,如果未能解决你的问题,请参考以下文章