Ios 在循环中的Sqlite3中插入数据
我是iOs编程新手。请帮忙 我正在创建一个数据库,若它不存在,那个么我将创建一个表,并在从文件中逐行读取记录之后,尝试将其插入数据库 我正在循环插入数据,我在互联网上读到了这段代码,我认为可能还剩下一些东西, 请提供帮助和指导,以获得此场景的最佳可能方式 是的,问题只与插入数据有关,创建数据库和带有模式的表工作正常 NSString*docsDir; NSArray*dirpathIos 在循环中的Sqlite3中插入数据,ios,objective-c,ios7,Ios,Objective C,Ios7,我是iOs编程新手。请帮忙 我正在创建一个数据库,若它不存在,那个么我将创建一个表,并在从文件中逐行读取记录之后,尝试将其插入数据库 我正在循环插入数据,我在互联网上读到了这段代码,我认为可能还剩下一些东西, 请提供帮助和指导,以获得此场景的最佳可能方式 是的,问题只与插入数据有关,创建数据库和带有模式的表工作正常 NSString*docsDir; NSArray*dirpath // Get the documents directory dirPaths = NSSearchPathFor
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
// Buil d the path to the database file
_databasePath = [[NSString alloc]
initWithString: [docsDir stringByAppendingPathComponent:
@"testing.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: _databasePath ] == NO)
{
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
char *errMsg;
const char *sql_stmt =
"CREATE TABLE IF NOT EXISTS testt (ID INTEGER PRIMARY KEY AUTOINCREMENT, Quotes VarChar, Author TEXT)";
if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
{
_status.text = @"Failed to create table";
}
else
{
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
sqlite3_stmt *statement;
// customCode
_filePathXml = [[NSBundle mainBundle] pathForResource:@"quotes_tod" ofType:@"txt"];
NSString * contentsQ = [NSString stringWithContentsOfFile:_filePathXml encoding:NSASCIIStringEncoding error:nil];
NSArray * lines = [contentsQ componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
// NSString * firstLine = [lines firstObject];
NSInteger countLines = lines.count;
NSInteger newCheck = 0;
while (newCheck < countLines) {
NSString *insertSQL = [NSString stringWithFormat:
@"INSERT INTO testt (Quotes ,Author) VALUES ( \"%@\" , \"Default\")",
lines[newCheck]];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_contactDB, insert_stmt,
1, &statement, NULL);
newCheck = newCheck +1;
// NSLog( @"%@" ,lines[newCheck]);
// newCheck = newCheck + 1;
}
// sqlite3_finalize(statement);
sqlite3_exec(_contactDB, "COMMIT", 0, 0, 0);
sqlite3_close(_contactDB);
}
}
}在循环中,您似乎没有执行您创建的insert语句 改变这个
sqlite3_prepare_v2(_contactDB, insert_stmt,
1, &statement, NULL);
对此
int returnCode = sqlite3_prepare_v2(_contactDB, insert_stmt, -1, &statement, nil);
if (returnCode == SQLITE_OK) {
if (sqlite3_step(stmt) != SQLITE_DONE) {
NSLog(@"SQL ERROR");
}
} else {
NSLog(@"Error %d in statement \"%@\"",returnCode, insertSQL);
}
sqlite3_finalize(stmt);
您还应该检查prepare语句是否工作我忘了添加它,现在它正在运行
while (newCheck < countLines) {
if( lines[newCheck] != SingleChar)
{
NSString *insertSQL = [NSString stringWithFormat:
@"INSERT INTO testt (Quotes ,Author) VALUES ( \"%@\" , \"%@\")",
lines[newCheck] , [NSString stringWithFormat: @"test"]];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_contactDB, insert_stmt,
-1, &statement, NULL);
if (sqlite3_step(statement) != SQLITE_DONE) {
SuccessComp = 1;
}
sqlite3_finalize(statement);
}
newCheck = newCheck +1;
// NSLog( @"%@" ,lines[newCheck]);
// newCheck = newCheck + 1;
}
您好@flexicoder我刚刚更新了对我有效的答案,这是正确的方法吗?根据我的答案,您仍然应该通过查看返回代码来检查初始sqlite3\u prepare\u v2是否有效