我想打开一个sqlite数据库,但它不在我的mainBundle中,而是在服务器中然后我没有这个
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"info.sqlite"];
但我有
NSString *filePath = @"http://serverAddress/info.sqlite";
NSURL *url = [NSURL URLWithString:filePath];
NSData *myData = [NSData dataWithContentsOfURL:url];
当我读到这个db我能做什么? 如果我的db在mainBundle中,我会这样做:
if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
const char *sql = "select id, one, two from TABLE";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
idNum = [NSNumber numberWithInt:(int)sqlite3_column_int(selectstmt, 0)];
...
...
但如果我有NSData?你能救我吗?
答案 0 :(得分:3)
SQLite是“无服务器”,您无法从您的设备访问服务器中托管的SQLite文件。如果它是只读数据库,您可以先下载它,也可以使用不同的数据库服务器(和客户端)
要将文件保存到文档目录并稍后阅读,请添加以下代码:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString* filePath = [documentsDirectory stringByAppendingPathComponent:@"database.sqlite"];
[data writeToFile:filePath atomically:NO];
可能最好的办法是在数据库周围发布一个瘦Web服务包装器。使用Web服务而不是直接远程数据库访问有更多优点,请查看此blog post以获得进一步说明。
答案 1 :(得分:-1)
我想您要下载最新的数据库包而不是在发布应用程序时将其捆绑,所以现在您已经下载了数据库文件,它以NSData
格式提供。
如果是这样,slution很简单,您只需将NSData
保存到文档目录(Refer this how to save NSData to file),然后按正常方式继续加载包。像这样,
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"info.sqlite"];
记住在加载文件“info.sqlite”之前,需要从NSData保存到该文件。我没试过这个,但它应该有效:))
快乐的编码!!!