2012-04-23 3 views
0

Я создал базу данных в своем приложении для Android, а затем вставил инструкцию. Все сработало, поэтому я хотел получить мою базу данных из MY_PACKAGE/databses/и скопировать ее на SD-карту, чтобы быть доступной.При открытии sqlite получение исключения android

Это работало, но когда я пытаюсь открыть с моим SQLite Firefox плагин я получаю эту ошибку:

SQLiteManager: Error in opening file Datas.sqlite - either the file is encrypted or corrupt 
Exception Name: NS_ERROR_FILE_CORRUPTED 
Exception Message: Component returned failure code: 0x8052000b (NS_ERROR_FILE_CORRUPTED) [mozIStorageService.openUnsharedDatabase] 

Может быть, я должен открыть что-то другое, или я не могу открыть это так легко?

дам весь код я использовал:

Обращение с моей БД я использовал весь этот код:

Using your own SQLite database in Android applications

Копирование его на карту памяти этот метод:

public static boolean backUpDataBase(Context context) { 

     final String DATABASE_NAME = "Data.sqlite"; 
     final String DATABASE_NAME_FULL = "/data/data/package/databases/" 
       + DATABASE_NAME; 
     boolean result = true; 

     // Source path in the application database folder 
     String appDbPath = DATABASE_NAME_FULL; 

     // Destination Path to the sdcard app folder 
     String sdFolder = Environment.getExternalStorageDirectory() 
       .getAbsolutePath() + "/" + "Datas.sqlite"; 

     File f = new File(sdFolder); 
     // if (!f.exists()) { 
     // f.mkdir(); 
     // } 

     InputStream myInput = null; 
     OutputStream myOutput = null; 
     try { 
      // Open your local db as the input stream 
      myInput = new FileInputStream(appDbPath); 
      // Open the empty db as the output stream 
      myOutput = new FileOutputStream(f); 

      // transfer bytes from the inputfile to the outputfile 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 
     } catch (IOException e) { 
      result = false; 
      e.printStackTrace(); 
     } finally { 
      try { 
       // Close the streams 
       if (myOutput != null) { 
        myOutput.flush(); 
        myOutput.close(); 
       } 
       if (myInput != null) { 
        myInput.close(); 
       } 
      } catch (IOException e) { 
      } 
     } 

     return result; 
    } 

Моя база данных выглядит так: 2 таблицы:

CREATE TABLE "Test" ("_id" INTEGER PRIMARY KEY NOT NULL UNIQUE , "Info" TEXT) 

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US') 

И код, чтобы сделать все что мне нужно:

// возвращение Databse которая чтения и записи DataBaseHelper данных = Main.createOrOpenDB (mContext);

 Main.backUpDataBase(mContext); 

     db = dataBase.myDataBase; 

     // Step 1: Inflate layout 
     setContentView(R.layout.tabs_fragment_activity); 

     try{ 
     db.execSQL("INSERT INTO " +"Test" +" Values ('1','Inserted');"); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

Так где же неправильно, так как вставка прекрасно работает?

ответ

0

Похоже, что в вашем коде есть проблема, чтобы записать его на SD-карту (которую я не вижу сразу).

Интересно, почему вы копируете его на SDCard? Похоже, вы просто хотите проверить файл ...

Если это ваша цель, я бы рекомендовал запустить эмулятор и просто использовать вид DDMS из затмения, перейти к файлу и нажать кнопку в верхнем правый угол, в подсказке которого указано «Вытащить файл с устройства». То, что вы получаете в эмуляторе, должно быть именно тем, что вы получаете на своем телефоне.

Смежные вопросы