问题描述
|
我已经通过SQLiteBrowser程序创建了android数据库,然后将其导入。当我运行代码时,它给出了意外错误。 İ已经取得
我打开android sdk和avg meneger并在模拟器中吃午餐。
然后,将数据库导入到/ data / data / mypackage路径。
在阅读时,我必须将其导入/ data / data / mypackage / databases。但是,当我打开路径mypackage时,只能看到lib文件夹。所以我添加到/ data / data / mypackage中。
我的代码部分是
private static String dbName = \"mobileGuideDatabase.db\";
private static String dbPath = \"/data/data/de.Guide\" + dbName;
SQLiteDatabase checkDB = null;
try {
checkDB = db.openDatabase(dbPath,null,SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException ex) {
throw ex;
}
那么,本节有什么问题呢?
解决方法
您的数据库路径似乎缺少斜杠。现在将是:
\“ / data / data / de.GuidemobileGuideDatabase.db \”,但我想您希望它是\“ / data / data / de.Guide / mobileGuideDatabase.db \”
, 希望您直接在手机上运行,手机不允许访问数据文件夹。
创建我们自己的文件夹
将数据库复制到该位置
从该位置打开数据库
供参考
public void createDataBase() throws IOException {
String path=mContext.getDir(\"Folder_Name\",Context.MODE_WORLD_WRITEABLE).getAbsolutePath();
DB_PATH=path;
boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist) {
try { copyDataBase(); }
catch (IOException mIOException)
{ Log.d(\"Exception\",mIOException.getMessage());
throw new Error(\"ErrorCopyingDataBase\");
}
}
}
private boolean checkDataBase() {
Log.d(TAG,\"In checkDataBase :::::\");
File dbFile = new File( DB_PATH+DATABASE_NAME);
Log.d(\"dbFile\",dbFile + \" \"+ dbFile.exists());
return dbFile.exists(); }
//Copy the database from assets
private void copyDataBase() throws IOException {
Log.d(TAG,\"In copyDataBase :::::\");
InputStream mInput = mContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DATABASE_NAME;
Log.d(TAG,\"In copyDataBase outFileName:::::\"+outFileName);
OutputStream mOutput = new FileOutputStream(outFileName);
byte[] mBuffer = new byte[1024]; int mLength;
while ((mLength = mInput.read(mBuffer))>0) {
mOutput.write(mBuffer,mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();
}
//Open the database,so we can query it
public boolean openDataBase() throws SQLException {
//DB_PATH + String mPath = DB_PATH+ DATABASE_NAME;
Log.v(\"mPath\",mPath);
mDataBase = SQLiteDatabase.openDatabase(mPath,null,SQLiteDatabase.CREATE_IF_NECESSARY);
return mDataBase != null;
}