SQLite 데이터베이스를 만들려고하지만 연락처 테이블에서 파생 된 것으로 보이는 문제가 발생했습니다 (필자는 '테이블을 삽입하는 동안 오류가 발생했습니다'라는 오류 메시지가 나타납니다 : CONTACTS ' ').SQLite 데이터베이스 테이블이 생성되지 않았습니다
아래 코드에서 누구나 무엇이 잘못되었고 어떻게 수정 될 수 있습니까? 이 예제는 내가 놀랐어요 왜 작동하지 않습니다이 가이드에서 바로 가져온 것입니다 http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_6_iPhone_Application
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *docsDir;
NSArray *dirPaths;
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
//Buid the path for database file
_databasePath = [[NSString alloc]
initWithString:[docsDir stringByAppendingPathComponent:@"contacts.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if([filemgr fileExistsAtPath: _databasePath ] == NO)
{
const char *db_path = [_databasePath UTF8String];
if(sqlite3_open(db_path, &_contactDB) == SQLITE_OK)
{
char *errMsg;
const char *sql_stmt =
"CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT)";
if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
{
_text.text = @"Failed to create table";
}
sqlite3_close(_contactDB);
} else {
_text.text = @"Failed to open/create database";
}
}
}
- (IBAction)saveName:(id)sender {
NSString *currentName = self.text.text;
NSString *nameSaved = [[NSString alloc] initWithFormat:currentName];
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
NSLog(@"pass");
NSString *insertSQL = [NSString stringWithFormat:
@"INSERT INTO CONTACTS (name) VALUES (\"%@\")",
nameSaved];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_contactDB, insert_stmt,
-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"pass");
} else {
NSLog(@"Error while inserting '%s'", sqlite3_errmsg(_contactDB));
}
sqlite3_finalize(statement);
sqlite3_close(_contactDB);
}
}
이전에이 코드를 실행했지만 작성한 파일이 실패한 경우 db가 문서 폴더에 남아 있기 때문에 장치/시뮬레이터에서 앱을 제거하고 앱을 다시 실행할 수 있습니다. create table 문을 다시 누르십시오). – Rob
다음 줄이 잘 보이지 않습니다. NSString * insertSQL = [NSString stringWithFormat : @ "INSERT INTO CONTACTS (name") VALUES (\ "% @ \") ", nameSaved] –