SQLite学习手册(在线备份)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/27/2326309.html 一、常用备份: 1 /* 2 ** This function is used to load the contents of a database file on disk 3 ** into the "main" database of open database connection pInMemory,or 4 ** to save the current contents of the database opened by pInMemory into 5 ** a database file on disk. pInMemory is probably an in-memory database, 6 ** but this function will also work fine if it is not. 7 ** 8 ** Parameter zFilename points to a nul-terminated string containing the 9 ** name of the database file on disk to load from or save to. If parameter 10 ** isSave is non-zero,then the contents of the file zFilename are 11 ** overwritten with the contents of the database opened by pInMemory. If 12 ** parameter isSave is zero,then the contents of the database opened by 13 ** pInMemory are replaced by data loaded from the file zFilename. 14 ** 15 ** If the operation is successful,SQLITE_OK is returned. Otherwise,if 16 ** an error occurs,an SQLite error code is returned. 17 */ 18 int loadOrSaveDb(sqlite3 *pInMemory,const char *zFilename,int isSave){ 19 int rc; /* Function return code */ 20 sqlite3 *pFile; /* Database connection opened on zFilename */ 21 sqlite3_backup *pBackup; /* Backup object used to copy data */ 22 sqlite3 *pTo; /* Database to copy to (pFile or pInMemory) */ 23 sqlite3 *pFrom; /* Database to copy from (pFile or pInMemory) */ 24 25 /* Open the database file identified by zFilename. Exit early if this fails 26 ** for any reason. */ 27 rc = sqlite3_open(zFilename,&pFile); 28 if( rc==SQLITE_OK ){ 29 30 /* If this is a 'load' operation (isSave==0),then data is copied 31 ** from the database file just opened to database pInMemory. 32 ** Otherwise,if this is a 'save' operation (isSave==1),then data 33 ** is copied from pInMemory to pFile. Set the variables pFrom and 34 ** pTo accordingly. */ 35 pFrom = (isSave ? pInMemory : pFile); 36 pTo = (isSave ? pFile : pInMemory); 37 38 /* Set up the backup procedure to copy from the "main" database of 39 ** connection pFile to the main database of connection pInMemory. 40 ** If something goes wrong,pBackup will be set to NULL and an error 41 ** code and message left in connection pTo. 42 ** 43 ** If the backup object is successfully created,call backup_step() 44 ** to copy data from pFile to pInMemory. Then call backup_finish() 45 ** to release resources associated with the pBackup object. If an 46 ** error occurred,then an error code and message will be left in 47 ** connection pTo. If no error occurred,then the error code belonging 48 ** to pTo is set to SQLITE_OK. 49 */ 50 pBackup = sqlite3_backup_init(pTo,"main",pFrom,"main"); 51 if( pBackup ){ 52 (void)sqlite3_backup_step(pBackup,-1); 53 (void)sqlite3_backup_finish(pBackup); 54 } 55 rc = sqlite3_errcode(pTo); 56 } 57 58 /* Close the database connection opened on database file zFilename 59 ** and return the result of this function. */ 60 (void)sqlite3_close(pFile); 61 return rc; 62 } 1 /* 2 ** Perform an online backup of database pDb to the database file named 3 ** by zFilename. This function copies 5 database pages from pDb to 4 ** zFilename,then unlocks pDb and sleeps for 250 ms,then repeats the 5 ** process until the entire database is backed up. 6 ** 7 ** The third argument passed to this function must be a pointer to a progress 8 ** function. After each set of 5 pages is backed up,the progress function 9 ** is invoked with two integer parameters: the number of pages left to 10 ** copy,and the total number of pages in the source file. This information 11 ** may be used,for example,to update a GUI progress bar. 12 ** 13 ** While this function is running,another thread may use the database pDb,or 14 ** another process may access the underlying database file via a separate 15 ** connection. 16 ** 17 ** If the backup process is successfully completed,SQLITE_OK is returned. 18 ** Otherwise,if an error occurs,an SQLite error code is returned. 19 */ 20 int backupDb( 21 sqlite3 *pDb,/* Database to back up */ 22 const char *zFilename,/* Name of file to back up to */ 23 void(*xProgress)(int,int) /* Progress function to invoke */ 24 ){ 25 int rc; /* Function return code */ 26 sqlite3 *pFile; /* Database connection opened on zFilename */ 27 sqlite3_backup *pBackup; /* Backup handle used to copy data */ 28 29 /* Open the database file identified by zFilename. */ 30 rc = sqlite3_open(zFilename,&pFile); 31 if( rc==SQLITE_OK ){ 32 33 /* Open the sqlite3_backup object used to accomplish the transfer */ 34 pBackup = sqlite3_backup_init(pFile,pDb,"main"); 35 if( pBackup ){ 36 37 /* Each iteration of this loop copies 5 database pages from database 38 ** pDb to the backup database. If the return value of backup_step() 39 ** indicates that there are still further pages to copy,sleep for 40 ** 250 ms before repeating. */ 41 do { 42 rc = sqlite3_backup_step(pBackup,5); 43 xProgress( 44 sqlite3_backup_remaining(pBackup),45 sqlite3_backup_pagecount(pBackup) 46 ); 47 if( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ 48 sqlite3_sleep(250); 49 } 50 } while( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED ); 51 52 /* Release resources allocated by backup_init(). */ 53 (void)sqlite3_backup_finish(pBackup); 54 } 55 rc = sqlite3_errcode(pFile); 56 } 57 58 /* Close the database connection opened on database file zFilename 59 ** and return the result of this function. */ 60 (void)sqlite3_close(pFile); 61 return rc; 62 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |