在sqlite数据库中插入多个表数据

时间:2016-06-16 06:41:34

标签: ios objective-c iphone

我在数据库中创建了多个表。现在我想将数据插入到这些表中。如何插入多个表格数据可以为此提供帮助。

我已经编写了这个用于创建1个表的代码:

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ATRG (id, name, language,imgurl) VALUES ( \"%@\",\"%@\",\"%@\",\"%@\")", ID, name, lang,imgUrl]; 
const char *insert_stmt = [insertSQL UTF8String]; sqlite3_prepare_v2(_globalDataBase, insert_stmt, -1, &statement, NULL); if (sqlite3_step(statement) == SQLITE_DONE) 
{ 
NSLog(@"Record Inserted");

 } else { NSLog(@"Failed to Insert Record"); 
} 

2 个答案:

答案 0 :(得分:1)

试试这个我希望它会有所帮助!!这是插入数据的地下代码

#import "Sqlitedatabase.h"
@implementation Sqlitedatabase
+(NSString* )getDatabasePath
{
    NSString *docsDir;
    NSArray *dirPaths;
    sqlite3 *DB;
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = dirPaths[0];

    NSString *databasePath = [docsDir stringByAppendingPathComponent:@"myUser.db"];

    NSFileManager *filemgr = [[NSFileManager alloc]init];

    if ([filemgr fileExistsAtPath:databasePath]==NO) {

        const char *dbpath = [databasePath UTF8String];
        if (sqlite3_open(dbpath,&DB)==SQLITE_OK) {

            char *errorMessage;
            const char *sql_statement = "CREATE TABLE IF NOT EXISTS users(ID INTEGER PRIMARY KEY AUTOINCREMENT,FIRSTNAME TEXT,LASTNAME TEXT,EMAILID TEXT,PASSWORD TEXT,BIRTHDATE DATE)";
            if (sqlite3_exec(DB,sql_statement,NULL,NULL,&errorMessage)!=SQLITE_OK) {

                NSLog(@"Failed to create the table");
            }
            sqlite3_close(DB);
        }
        else{
            NSLog(@"Failded to open/create the table");
        }
    }
    NSLog(@"database path=%@",databasePath);
    return databasePath;
}

+(NSString*)encodedString:(const unsigned char *)ch
{
    NSString *retStr;
    if(ch == nil)
        retStr = @"";
    else
        retStr = [NSString stringWithCString:(char*)ch encoding:NSUTF8StringEncoding];
    return retStr;
}
+(BOOL)executeScalarQuery:(NSString*)str{

    NSLog(@"executeScalarQuery is called =%@",str);

    sqlite3_stmt *statement= nil;
    sqlite3 *database;
    BOOL fRet = NO;
    NSString *strPath = [self getDatabasePath];
    if (sqlite3_open([strPath UTF8String],&database) == SQLITE_OK) {
        if (sqlite3_prepare_v2(database, [str UTF8String], -1, &statement, NULL) == SQLITE_OK) {
            if (sqlite3_step(statement) == SQLITE_DONE)
                fRet =YES;
        }

        sqlite3_finalize(statement);
    } 
    sqlite3_close(database);
    return fRet;
}

+(NSMutableArray *)executeQuery:(NSString*)str{

sqlite3_stmt *statement= nil; // fetch data from table
sqlite3 *database;
NSString *strPath = [self getDatabasePath];
NSMutableArray *allDataArray = [[NSMutableArray alloc] init];
if (sqlite3_open([strPath UTF8String],&database) == SQLITE_OK) {
    if (sqlite3_prepare_v2(database, [str UTF8String], -1, &statement, NULL) == SQLITE_OK) {


        while (sqlite3_step(statement) == SQLITE_ROW) {
            NSInteger i = 0;
            NSInteger iColumnCount = sqlite3_column_count(statement);
            NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
            while (i< iColumnCount) {
                NSString *str = [self encodedString:(const unsigned char*)sqlite3_column_text(statement, (int)i)];


                NSString *strFieldName = [self encodedString:(const unsigned char*)sqlite3_column_name(statement, (int)i)];

                [dict setObject:str forKey:strFieldName];
                i++;
            }

            [allDataArray addObject:dict];
        }
    }

    sqlite3_finalize(statement);
} 
sqlite3_close(database);
return allDataArray;
}
@end

并且在您想要使用的地方调用该方法!!

NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO users(firstname,lastname,emailid,password,birthdate) VALUES ('%@','%@','%@','%@','%@')",_firstNameTextField.text,_lastNameTextField.text,_emailTextField.text,_passwordTextField.text,_BirthdayTextField.text];
if ([Sqlitedatabase executeScalarQuery:insertSql]==YES)
{

    [self showUIalertWithMessage:@"Registration succesfully created"];

}else{
    NSLog(@"Data not inserted successfully");
}

如果你想从表中获取数据,那么你可以这样做!!

 NSString *insertSql = [NSString stringWithFormat:@"select emailid,password from users where emailid ='%@' and password = '%@'",[_usernameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]],[_passwordTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        NSMutableArray *data =[Sqlitedatabase executeQuery:insertSql];
        NSLog(@"Fetch data from database is=%@",data);

多次执行查询!!

NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO users (firstname,lastname,emailid,password,birthdate) VALUES ('%@','%@','%@','%@','%@')",_firstNameTextField.text,_lastNameTextField.text,_emailTextField.text,_passwordTextField.text,_BirthdayTextField.text];

    NSString *insertSql1 = [NSString stringWithFormat:@"INSERT INTO contact (firstname,lastname,emailid,password,birthdate) VALUES ('%@','%@','%@','%@','%@')",_firstNameTextField.text,_lastNameTextField.text,_emailTextField.text,_passwordTextField.text,_BirthdayTextField.text];

    NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:insertSql,insertSql1,nil];

    for (int i=0; i<array.count; i++)
    {
        [Sqlitedatabase executeScalarQuery:[array objectAtIndex:i]];
    }

答案 1 :(得分:0)

请查看以下问题:

Insert multiple tables in same database in sqlite

或者如果你想要

Multi-table INSERT using one SQL statement in AIR SQLite

然后使用这个: http://probertson.com/articles/2009/11/30/multi-table-insert-one-statement-air-sqlite/