Tag: sqlite

如何将预先存在的sqlite文件导入到Core Data中?

我需要导入一个.sqlite文件到核心数据,我在互联网上search,发现: 核心数据教程:如何预加载/导入现有数据 它正在创build一个Python脚本来填充这个数据库,方法是读入旧数据库的内容,然后在新数据库中创build适当的行。 但是我的sqlite数据库在表和列的数量方面太大,这可能花费我相当多的时间。 我也发现这个: 在iPhone OS 3.0上使用预填充的SQLite数据库和核心数据 但我不太明白,它看起来像是将旧的数据库复制到一个新的数据库,那么它如何将Z_后缀添加到所有的表和列名? 此外,它要求我创build实体和属性,反正这是可以自动完成(从SQLite数据库文件)? 谢谢!

我应该在哪里存储我的iPhone应用程序的SQLite数据库?

我有几个市场上的iOS应用程序,并在他们所有的我有一个小的SQLite数据库文件连接到应用程序,以提供用户我的数据。 一旦安装,用户通过更改某些选项来定制这个数据库。 到目前为止,所有这些应用程序都将数据库存储在NSDocumentsDirectory 。 在提交上次更新之后,由于将数据存储在错误的位置而被拒绝。 对于拒绝的应用程序,我将存储位置更改为NSCachesDirectory 。 我现在担心caching将被清除,并删除用户定制。 该应用程序仍然会运行,数据库将得到重新创build,但所有更改的表将被重置,从而扰乱用户。 这种types的数据库文件应该存储在哪里? 我是否正确地把它放在Docs目录中? 根据苹果公司的说法,Docs目录是“关键数据”,它是用户生成的数据或正确操作应用程序所需的数据。 我觉得它属于这一类,坚持我的用户设置是正确的操作,但谁想要等待上诉?

如何通过FMDB将NSdata保存并检索到sqlite中

我怎样才能保存NSData到sqlite中,我正在使用FMDB封装保存数据。 下面是我到目前为止所尝试的代码 为了节省 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model.expertArray];; NSString *query = [NSString stringWithFormat:@"insert into save_article values ('%@','%@','%@','%@','%@','%@')", model.Id, model.title, model.earliestKnownDate, data, model.excerpt,model.image_url]; 为了追求 while([results next]) { NSData *data = [results dataForColumn:@"experts"]; NSMutableArray *photoArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; } 我已经尝试了数据typesblob和文本,但目前为止没有运气,任何人都可以指导我如何做到这一点?

如何保证主机应用程序和扩展使用的共享应用程序容器中的核心数据存储中的唯一条目?

为了有效地提出我的问题,我们首先考虑一下我正面临的确切情况: 一般设置 主机iOS 8应用程序。 与主机应用程序捆绑在一起的一个或多个iOS 8扩展(WatchKit,Share等)。 主机应用程序和所有扩展在共享应用程序组容器中共享同一个Core Data SQLite存储。 每个应用程序/扩展都有自己的NSPersistentStoreCoordinator和NSManagedObjectContext。 每个持久性存储协调器都使用一个持久性存储,它与所有其他持久性存储共享组容器中相同的SQLite资源。 应用程序和所有扩展使用通用代码库来同步Internet上的远程API资源的内容。 导致问题的事件序列 用户启动主机应用程序。 它开始从远程API资源获取数据。 核心数据模型对象是基于API响应创build的,并“插入”到主机应用程序的托pipe对象上下文中。 每个API实体都有一个唯一标识,在远程API后端标识它。 通过“upsert”,我的意思是,对于每个API实体,如果无法find给定uniqueID的现有条目,则主机应用程序仅在Core Data中创build一个新条目。 同时,用户还启动了一个主机应用程序的扩展。 它也从相同的远程API执行某种获取。 它还尝试在parsingAPI响应时执行“upsert”。 问题:如果主机应用程序和扩展同时尝试为同一个API实体插入Core Data条目,会发生什么情况? 要看看这可能是怎么回事,让我们来看一个upsert的事件序列: 核心数据上传序列: APIparsing代码parsing给定API实体的唯一ID。 parsing器对任何与uniqueID等于parsing的uniqueID的谓词相匹配的条目执行Core Data提取。 如果找不到现有条目,parsing器将为此API实体插入一个新的Core Data条目,并将其uniqueID属性设置为parsing的uniqueID。 parsing器保存托pipe的对象上下文,这会将新的条目数据向下推送到SQLite后备存储。 问题详细 假设主机应用程序和扩展程序独立parsing同一API实体的API响应。 如果主机应用程序和扩展程序都在步骤3完成之前到达步骤3,则它们都将尝试为相同的唯一ID插入新的核心数据条目。 当他们到达第4步并调用save:在各自的被pipe理对象上下文中时,Core Data将快乐地创build重复的条目。 据我所知,核心数据没有任何办法来标记一个属性是唯一的。 我需要一个与SQLite INSERT OR IGNORE + UPDATE组合相当的核心数据。 。 否则,我需要一种方法来“locking”持久存储的SQLite后备存储,这听起来像是一个麻烦的秘诀。 有没有一种已知的方法来解决iOS 8扩展引入的这个相当新颖的问题?

我如何访问iPhone上的SQLite数据库实例?

我正在开发一个使用内置SQLite数据库的iPhone应用程序。 我试图通过sqlite3命令行工具查看和打开数据库,所以我可以执行任意的SQL对它。 当我在模拟器中运行我的应用程序时,它创build的.sqlite文件位于~/Library/Application Support/iPhone Simulator/User/Applications/ 。 如何在物理iPhone上看到该文件?

iOS CoreData – 启用sqlite WAL / Write-Ahead Logging有什么缺点

在WWDC 2013会议“207:核心数据的新增function”中,他们提到在添加持久性存储时,可以通过传递选项字典来启用SQLite WAL: @{ NSSQLitePragmasOption: @"journal_mode = WAL" } (这是在iOS4 +上可用的,并且将是未来iOS版本的默认值)。 我想知道这是否会在我的应用程序的早期iOS版本启用通常是一件好事。 我已经咨询了关于提前写入日志的SQLite页面和他们提到的缺点,其中大部分似乎不适用于iOS,除了: 在大多数情况下读取和很less写入的应用程序中,WAL可能比传统的回滚日志方法稍慢(可能慢1%或2%)。 几乎所有的好处听起来像是他们可能会在iOS上的好处: 在大多数情况下,WAL要快得多。 WAL提供更多的并发性,因为读者不会阻止作者,作者也不会阻止读者。 阅读和写作可以同时进行。 使用WAL,磁盘I / O操作往往更顺序。 WAL使用更less的fsync()操作,因此在fsync()系统调用中断的系统上不易受到问题的影响。 我asuming(也许受到一些检查我的应用程序,以确保它不会放慢速度),这将是一件好事,但有没有什么缺点,我应该留意或任何已知的问题?

目标c中的断言失败错误

我有Json数据,但是当我尝试将这些logging插入到sqlite数据库时,我得到了这个错误断言失败。 我可以看到与NSLog的数据,但我不能插入数据库。 哪里不对? 我该如何解决? 感谢您的回复。 我的代码如下: -(void)processDoneWithRequestName:(NSString*)tagName{ sqlite3_stmt *stmt=nil; //NSArray *pathsArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *doumentDirectoryPath=@"/Users/ds/Desktop/SqliteTest/SqliteTest"; NSString *cruddatabase=[doumentDirectoryPath stringByAppendingPathComponent:@"SqliteTestDb.sqlite"]; if ([tagName isEqualToString:Logins]) { int keys = [[response.item objectForKey:@"Lipton"] count]; NSLog(@"count %i",keys); for (int i=0; i<keys; i++) { NSString *str1 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"IsSuccess"]; NSString *str2 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"ProducerId"]; NSString *str3 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Latitude"]; NSString *str4 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Longitude"]; NSString […]

如何使用fmdblogin页面?

我有一个login页面,有2个用户名和密码的文本框和几个button。 我想知道如何使用fmdb检查数据库中是否存在用户名/密码组合? 我也有另一个用于用户注册页面的viewcontroller,有4个用户名,密码,电子邮件,联系号码的文本框,还有一个button可以将input的文本input到数据库中。 如何将input的文本保存到数据库的4个字段中? 提前致谢。 这是我的代码:我成功地将数据input到数据库中,在registerViewController中,但是如果用户忘记密码和/或用户名,我想input代码到“btnforgot”(忘记密码)操作中。 我已经在loginViewController中取得了一些成功,至于检查数据库中的用户名和密码是否与数据库中的数据相同,但是我想我缺less一些代码。 LOGINVIEW #import "loginViewController.h" #import "carTypeViewController.h" #import "registerViewController.h" #import "FMDatabase.h" #import "AppDelegate.h" #import "FMDatabaseAdditions.h" @interface loginViewController () @end @implementation loginViewController @synthesize lblPass,lblUserName,txtPass,txtUser; – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 如果(self){//自定义初始化}返回自我; } – (void)viewDidLoad { self.title = @"Enter Credentials"; username = [[NSMutableArray alloc]init]; password = [[NSMutableArray alloc]init]; […]

Android的SQLite删除表,实际上并没有删除行

嗨,我想通过下面的查询删除表中的所有行 db.beginTransaction(); // db is a SQLiteDatabase object int deleted = db.delete("user", null, null); db.endTransaction(); 我得到n表中删除的行数。 但是表中仍然存在行。 我的删除电话中有任何错误?

将图像存储到sqlite数据库

下面是我的代码来存储图像在sqlite数据库。 当我用它来存储值的作品,现在我试图在sqlite数据库中存储图像。 我不知道我在做什么错。 我已经搜查了,我不能得到我需要的答案。 任何人都可以用他的代码帮助我 sqlite3 *database; dbName=@"dataTable.sqlite"; NSArray *documentpath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentdir=[documentpath objectAtIndex:0]; dbPath=[documentdir stringByAppendingPathComponent:dbName]; sqlite3_stmt *compiledStmt; if(sqlite3_open([dbPath UTF8String], &database)==SQLITE_OK){ NSLog(@"Name:%@,Company:%@,URL:%@",model.personName,model.companyName,model.imgurl); const char *insertSQL="insert into Persons(PersonName,CompanyName,ImgUrl,PersonImage)values(?,?,?,?)"; if(sqlite3_prepare_v2(database,insertSQL, -1, &compiledStmt, NULL)==SQLITE_OK){ sqlite3_bind_text(compiledStmt,1,[model.personName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,2,[model.companyName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,3,[model.imgurl UTF8String],-1,SQLITE_TRANSIENT); NSData *imageData=UIImagePNGRepresentation(imageView.image); sqlite3_bind_blob(compiledStmt, 4, [imageData bytes], [imageData length], NULL); NSLog(@"Prepare"); sqlite3_step(compiledStmt); }sqlite3_finalize(compiledStmt); } 更新: 感谢大家..我清除这个问题,从这里问另一个问题.. 存储和检索到iPhone的数据库的图像这可能有助于他人。