[database] sqlite 데이터베이스를 백업하는 방법은 무엇입니까?
이를 수행하는 적절한 방법은 무엇입니까? .sq3 파일 만 복사합니까?
사이트에 사용자가 있고 파일이 복사되는 동안 기록되는 경우 어떻게됩니까?
답변
sqlite3 명령 줄 도구에는 .backup
dot 명령이 있습니다.
다음을 사용하여 데이터베이스에 연결할 수 있습니다.
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();
}