基本上,我做了以下事情:
//Delete Output file if it exists
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if(insertStmt == nil)
{
sqlite3_stmt *selectStatement;
const char *sqlStatement=[[NSString stringWithFormat:
@"DROP TABLE IF EXISTS fileOutput"]UTF8String];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if (sqlite3_prepare_v2(database, sqlStatement, -1, &selectStatement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
while (sqlite3_step(selectStatement) == SQLITE_ROW)
{
}
sqlite3_reset(selectStatement);
sqlite3_finalize(selectStatement);
}
}
}
sqlite3_close(database);
//Add Output file
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if(insertStmt == nil)
{
sqlite3_stmt *selectStatement;
const char *sqlStatement=[[NSString stringWithFormat:
@"CREATE TABLE fileOutput AS SELECT * FROM Y WHERE 0"]UTF8String];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if (sqlite3_prepare_v2(database, sqlStatement, -1, &selectStatement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
while (sqlite3_step(selectStatement) == SQLITE_ROW)
{
}
sqlite3_reset(selectStatement);
sqlite3_finalize(selectStatement);
}
}
}
sqlite3_close(database);
//Copy into table
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if(insertStmt == nil)
{
sqlite3_stmt *selectStatement;
const char *sqlStatement=[[NSString stringWithFormat:
@"INSERT INTO fileOutput SELECT * FROM Y WHERE file IN ('%@')",pickerField]UTF8String];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
if (sqlite3_prepare_v2(database, sqlStatement, -1, &selectStatement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
while (sqlite3_step(selectStatement) == SQLITE_ROW)
{
}
sqlite3_reset(selectStatement);
sqlite3_finalize(selectStatement);
}
}
}
sqlite3_close(database);
//Make the OUTPUT sqlite file
[self deleteEditableCopyOfDatabaseIfNeeded];
//ATTACH OUTPUT file to Y
const char *outputDBPath = [[documentsDirectory stringByAppendingPathComponent:@"X.sqlite"] UTF8String];
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
NSString *attach = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS X", outputDBPath];
const char *attachSQL = [attach UTF8String];
char *errorMessage;
if (sqlite3_exec(database, attachSQL, NULL, NULL, &errorMessage) == SQLITE_OK) {
//Copy the table into sqlite file
sqlite3_stmt *selectstmt;
const char *sqlStatement1 = "INSERT OR REPLACE INTO X (all the fields go here ) SELECT * FROM fileOutput";
if (sqlite3_prepare_v2(database,sqlStatement1, -1, &selectstmt, NULL) == SQLITE_OK) {
while (sqlite3_step(selectstmt) == SQLITE_ROW) {
//if(sqlite3_step(selectstmt)==SQLITE_DONE)
//{
NSLog(@"insert successfully");
}
}
else
{
NSLog(@"insert not successfully");
}
sqlite3_finalize(selectstmt);
}
}
sqlite3_close(database);
[self sendEmailWithFile];