[database] sqlite 데이터베이스를 백업하는 방법은 무엇입니까?

이를 수행하는 적절한 방법은 무엇입니까? .sq3 파일 만 복사합니까?

사이트에 사용자가 있고 파일이 복사되는 동안 기록되는 경우 어떻게됩니까?



답변

sqlite3 명령 줄 도구에는 .backupdot 명령이 있습니다.

다음을 사용하여 데이터베이스에 연결할 수 있습니다.

sqlite3 my_database.sq3

다음과 같이 backup dot 명령을 실행하십시오.

.backup backup_file.sq3

데이터베이스에 대한 대화식 연결 대신 백업을 수행하고 나중에 연결을 닫을 수도 있습니다.

sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"

어느 쪽이든 결과는 backup_file.sq3데이터베이스의 이름 이 지정된 복사본 my_database.sq3입니다.

현재 데이터베이스에서 작업하는 모든 사용자를 관리하므로 정기적 인 파일 복사와 다릅니다. 데이터베이스에 적절한 잠금이 설정되어 있으므로 백업이 독점적으로 수행됩니다.


답변

.backup이 가장 좋은 방법입니다.

sqlite3 my_database .backup my_database.back

.dump 명령을 시도 할 수도 있습니다. 전체 데이터베이스 또는 테이블을 텍스트 파일로 덤프하는 기능을 제공합니다. TABLE이 지정된 경우 LIKE 패턴 TABLE과 일치하는 테이블 만 덤프합니다.

sqlite3 my_database .dump > my_database.back

덤프 및 저장을 사용하여 보관 복사본을 만드는 좋은 방법은 나중에 데이터베이스를 재구성합니다.

sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database

또한이 질문을 확인 수행 sqlite3를 .backup 및 .dump 명령은 데이터베이스를 잠글?


답변

try {
    final String inFileName = "/data/data/your app package/databases/db";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/Backup";
    File dir = new File(path);
    if (!dir.exists()) dir.mkdirs();
    String outFileName = path + "/filename"; // output file name
    // Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }
    Toast.makeText(getActivity(), "Backup Successfully", 2).show();
    // Close the streams
    output.flush();
    output.close();
    fis.close();
}
catch (Exception e) {
    e.printStackTrace();
}


답변