Tôi đang thử làm việc trên ứng dụng iOS cho phép người dùng đồng bộ hóa cơ sở dữ liệu sqlite của họ qua Bluetooth bằng GameKit. Có cách nào để thực hiện tương đương với .dump trên vỏ sqlite bằng cách sử dụng bất kỳ của nhiều thư viện mục tiêu sqlite-c?Có tương đương sqlite .dump trong mục tiêu-c không?
10
A
Trả lời
-1
Tôi không nghĩ vậy. Tuy nhiên, bạn có thể thực thi câu lệnh SELECT * và sau đó lặp qua argc trong hàm gọi lại.
Something như
void callback (void *param, int argc, char **argv, char **azColName)
{
for(int i=0;i<argc;i++)
{
get ... azColName[i] ... argv[i]
}
}
+0
Bạn có thể mở rộng câu trả lời này để cung cấp thêm một chút ngữ cảnh không? Tôi nghĩ rằng tôi hiểu nhiều hơn hoặc ít hơn những gì bạn đang nói, nhưng tôi không hoàn toàn chắc chắn như thế nào nó sẽ làm việc trong một ứng dụng thực tế. – buildsucceeded
3
Bạn có thể tạo một tập tin cơ sở dữ liệu sao lưu, gửi mà hơn và sau đó thực hiện việc sáp nhập trên thiết bị đích. Mã để tạo tệp sao lưu như sau:
- (void) exportDB {
sqlite3 *sourceDB, *destinationDB;
sqlite3_backup *sql3Backup;
NSString *sourceDBPath = @"/path/to/source/database";
NSString *destinationDBPath = @"/path/to/destination/database";
if(sqlite3_open([sourceDBPath UTF8String],&sourceDB) != SQLITE_OK){
NSLog(@"%s\n",sqlite3_errmsg(sourceDB));
return ;
}
if(sqlite3_open([destinationDBPath UTF8String],&destinationDB) != SQLITE_OK){
sqlite3_close(sourceDB);
NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
return;
}
sql3Backup = sqlite3_backup_init(destinationDB,"main",sourceDB,"main");
if(sql3Backup == NULL){
sqlite3_close(sourceDB);
sqlite3_close(destinationDB);
NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
return;
}
if(sqlite3_backup_step(sql3Backup, -1) != SQLITE_DONE){
NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
return;
}
if(sqlite3_backup_finish(sql3Backup) != SQLITE_OK){
NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
return;
}
sqlite3_close(sourceDB);
sqlite3_close(destinationDB);
}
Các vấn đề liên quan
- 1. Có 'không tương đương' trong GORM không?
- 2. Tương đương Sscanf trong mục tiêu-C
- 3. Có tương đương MessageBox trong WPF không?
- 4. Có tương đương XDomainRequest trong Firefox không?
- 5. Có tương đương epoll trong Java không?
- 6. Có "\ n" tương đương trong VBScript không?
- 7. Python có tương đương với 'chuyển' không?
- 8. Có phương pháp tương đương LINQ không?
- 9. SQLite tương đương với ISNULL(), NVL(), IFNULL() hoặc liên hiệp()
- 10. SQLite tương đương với SQL Server Chức năng DateAdd
- 11. Elasticsearch có tương đương với 'lõi' như trong solr không?
- 12. Có một MessageBox.Show() tương đương trong MonoCode
- 13. python tương đương tương đương
- 14. Có tương đương với "gettimeofday" trong .NET
- 15. Có tương đương C# m_nCmdShow không?
- 16. jquery có tương đương với dojo.hitch() không?
- 17. NotifyIcon có tương đương với MouseDown không?
- 18. Có Python tương đương với HighLine không?
- 19. Có 'git sed' hoặc tương đương không?
- 20. Có tương đương ipython cho erlang không?
- 21. Có tương đương Profiler cho MySql không?
- 22. Có Java tương đương với libevent không?
- 23. Mục tiêu-C HashMap tương đương
- 24. Powerhell có tương đương với popen không?
- 25. Có tương đương C++ với getcwd không?
- 26. Mono có tương đương với ILDASM không?
- 27. C# có tương đương std :: nth_element không?
- 28. VBScript có tương đương DateTime.TryParse không?
- 29. Có tương đương java.util.concurrent cho WeakHashMap không?
- 30. Mercurial có tương đương git sạch không?
Hiện không có lớp sẵn sàng để sử dụng cho lệnh kết xuất này. Nó không nên quá khó đọc tất cả các bảng và tạo ra một dump.sql với các stertement INSERT. –
Điều gì đó có thể hữu ích: Bạn có thể nhận danh mục bảng bằng cách thực hiện truy vấn vào bảng hệ thống 'sqlite_master' (nghĩa là "SELECT * FROM sqlite_master;"). Nếu bạn lặp lại kết quả, bạn có thể lấy tên bảng từ trường 'tbl_name' và trường 'sql' chứa câu lệnh 'CREATE TABLE'. Phân tích cú pháp sau để lấy tên trường. – mpemburn