2014-12-11 3 views
-3

전화 앱 저장 위치에 sqlite 데이터베이스 파일을 푸시해야합니다. 내 앱 패키지 데이터베이스에 대해 this을 사용해 보았습니다.하지만 작동하지 않습니다.전화로 sqlite 데이터베이스 파일을 밀어

장치 셸에서 아래 명령을 사용했지만 장치를 찾을 수 없습니다라는 메시지가 표시되었습니다.

[email protected]: adb push MY_DB_FILE /data/data/MY_PACKAGE_NAME/databases/ 
+0

는 –

+0

를 sdcard에 위해 (당신이 backupDBPath 문자열의 .DB 파일의 이름을 변경할 수 있습니다) @ NaveenTamrakar이 나에게 묻고 있거나 나에게 말하고있다. 제발 더 자세히 설명해라. –

+0

휴대 전화가 루팅되어 있고'su'가 없거나 앱이 데이터베이스 파일 자체를 쓰지 않는 한'/ data/data /'에 쓸 수 없습니다. – 323go

답변

-1

데이터베이스 파일이 필요할 때마다 아래 표시된 write() 메소드를 호출하십시오. 그것은 당신의 장치의 루트 폴더에 backupname.db 파일을 만듭니다. 유 Assest에서 데이터베이스를 복사 할

private void write() throws IOException { 
    File sd = Environment.getExternalStorageDirectory(); 

    if (sd.canWrite()) { 

     String currentDBPath = DatabaseHelper.DATABASE_NAME; 
     String backupDBPath = "backupname.db"; 
     File currentDB = new File(getDBPath(), currentDBPath); 
     File backupDB = new File(sd, backupDBPath); 

     if (currentDB.exists()) { 
      FileChannel src = new FileInputStream(currentDB).getChannel(); 
      FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
      dst.transferFrom(src, 0, src.size()); 

      src.close(); 
      dst.close(); 

     } 
    } 
} 

private String getDBPath() { 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     return getFilesDir().getAbsolutePath().replace("files", "databases") + File.separator; 
    } else { 
     return getFilesDir().getPath() + getPackageName() + "/databases/"; 
    } 
} 
+0

누구든지 downvoted있다, 당신은 내 프로젝트에서 모든 작업 괜찮아,이게 뭐가 잘못 됐는지 말해 줄 수있어. –

관련 문제