有没有人能帮帮忙,
我一直使用- (void)handleOpenURL:(NSURL *)openIn方法向应用程序用户导入电子邮件sqlite数据库,然后他们使用“打开位置”选项导入数据,问题是电子邮件文件变得太大,所以我不想覆盖sqlite文件,而是将数据附加到本地sqlite DB (该数据库确实有4个表)
dbRMNames = @"fieldnames.sql";
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSError *writeError = nil;
NSString *filePathx = [documentsPath stringByAppendingPathComponent:dbRMNames];
[dbimport writeToFile:filePathx atomically:YES];
NSLog(@"Import File Name: %@", dbRMNames);
if (writeError)
{
NSLog(@"Error writing file: %@", writeError);
}上面是我的currant方法,我想我需要在viewDidLoad中创建一个表,只是不确定如何将NSData保存到表中。
`- (void)handleOpenURL:(NSURL *)urlx {
databaseName2 = @"KpiPapav2.sqlite";
NSArray *documentPaths2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir2 = [documentPaths2 objectAtIndex:0];
databasePath2 = [documentsDir2 stringByAppendingPathComponent:databaseName2];
NSData *dbFile = [[NSData alloc] initWithContentsOfURL:urlx];
NSString* dbString = [[NSString alloc] initWithData:dbFile encoding:NSUTF8StringEncoding];
NSLog(@"NSString: %@", dbString);
NSError *writeError = nil;
if (writeError) {
NSLog(@"Error writing file: %@", writeError);
}
const char *dbpath = [databasePath2 UTF8String];
if (sqlite3_open(dbpath, &datapapav2) == SQLITE_OK)
{
NSString* query =[NSString stringWithFormat:@"INSERT INTO kpiRegionCPW (CPW_Region,Region_Number,Region_Name,Regional_General_Manager,Period,EBIT_YTD,EBIT_12Month,Sales_Conversion,Sales_Conversion_VsTarget,PPCR,PPCR_VsTarget,GSHT,Upgrade_Mix,Upgrade_Mix_VsTarget,WCSS,WCSS_VsTarget,Right_Sell_Usage,Right_Sell_Usage_VsTarget,Mystery_Shopper,Mystery_Shopper_VsTarget,SOH_Spend,SOH_Spend_VsTarget,CATI,CATI_VsTarget,Shrinkage,Shrinkage_VsTarget) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"];
const char *compiledStatement = [query UTF8String];
sqlite3_stmt *compiledStatement1;
if(sqlite3_prepare_v2(datapapav2, compiledStatement, -1, &compiledStatement1, NULL) == SQLITE_OK)
{
sqlite3_bind_text(compiledStatement1, 1, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 2, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 3, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 4, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 5, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 6, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 7, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 8, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 9, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 10, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 11, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 12, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 13, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 14, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 15, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 16, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 17, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 18, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 19, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 20, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 21, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 22, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 23, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 24, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 25, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement1, 26, [dbString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(compiledStatement1);
sqlite3_finalize(compiledStatement1);
}
else {
NSLog(@"Error");
}
}
sqlite3_close(datapapav2);}
`认为我已经很接近了,但是从我的NSString "dbString“中获取”空“数据?
发布于 2015-12-17 22:33:12
在大量的冲浪和阅读之后,最终到达了那里,代码如下
-(void) updateLocalSqlite {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"newDataPapav2.sqlite"];;
NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"KpiPapav2.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
char *error;
if ([fileManager fileExistsAtPath:newdbPath]) {
}
sqlite3 *database;
if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) {
NSLog(@"Error to open database");
}
NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath];
sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to Attach = %s",error);
}
NSString *sqlString = @"INSERT INTO kpiRegionCPW SELECT * FROM aDB.kpiRegionCPW";
sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy kpiRegionCPW table = %s",error);
}
NSString *sqlString2 = @"INSERT INTO kpiRegion SELECT * FROM aDB.kpiRegion";
sqlite3_exec(database, [sqlString2 UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy kpiRegion table = %s",error);
}
NSString *sqlString3 = @"INSERT INTO kpiStoreCPW SELECT * FROM aDB.kpiStoreCPW";
sqlite3_exec(database, [sqlString3 UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy kpiStoreCPW table = %s",error);
}
NSString *sqlString4 = @"INSERT INTO kpiStore SELECT * FROM aDB.kpiStore";
sqlite3_exec(database, [sqlString4 UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy kpiStore table = %s",error);
}
NSString *sqlString5 = @"REPLACE INTO dataPPR SELECT * FROM aDB.dataPPR";
sqlite3_exec(database, [sqlString5 UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to REPLACE dataPPR table = %s",error);
}
NSString *sqlString6 = @"REPLACE INTO storeDetails SELECT * FROM aDB.storeDetails";
sqlite3_exec(database, [sqlString6 UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to REPLACE storeDetails table = %s",error);
}
NSLog(@"database update success");
sqlite3_close(database);
}https://stackoverflow.com/questions/33896247
复制相似问题