正确的做法是什么?我是否只复制.sq3文件?
如果网站上有用户并且在复制文件时正在写入文件怎么办?
正确的做法是什么?我是否只复制.sq3文件?
如果网站上有用户并且在复制文件时正在写入文件怎么办?
Answers:
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
。
它与常规文件复制不同,因为它可以照顾当前在数据库上工作的所有用户。在数据库上设置了适当的锁,因此备份专门进行。
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.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
.backup
无法按上述方式工作(“ .backup上缺少FILENAME参数”)
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();
}