2011-05-29 55 views
0

我已经通过SQLiteBrowser程序创建了android数据库,然后导入它。当我运行我的代码时,它会发生意外错误。我已经取得android数据库错误

  1. 我打开android sdk和avg meneger和午餐模拟器。
  2. 然后我将数据库导入到/ data/data/mypackage路径中。

    当我阅读时,我必须导入它/ data/data/mypackage/databases。但是当我打开mypackage路径时,我只能看到lib文件夹。所以我加入了/ data/data/mypackage。

  3. 我的代码部分是

    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; 
    } 
    

那么,什么是错的这个部分?

回答

2

你的数据库路径似乎缺少斜线。它现在是: “/data/data/de.GuidemobileGuideDatabase.db”,但我想你想它是“/data/data/de.Guide/mobileGuideDatabase.db”

+0

我已经纠正缺少斜杠,但我仍然有同样的错误 – 2011-05-29 14:18:55

+0

什么是例外?哪条线? – redline 2011-05-29 19:30:19

0

我希望你在运行电话直接,手机将不允许访问数据文件夹。

  1. 创建自己的文件夹
  2. 数据库复制到位置
  3. 打开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, 0, 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; 
    }