xCode 4.2 에서 SQLite 사용하기
- xCode 4.2 에는 Resources 폴더가 없습니다.
(프로젝트 선택한 후 Build-Phases탭 아래쪽의 Copy Bundle Resources에 만들어 놓은 db추가 해야 합니다.)
- 이미 만들어져 이는 db.sqlite를 불러서 NSLog();를 통해 확인해 보는 예제입니다.
- Document에 db.sqlite 파일 복사하는 부분 넣지 않으니까 결과가 안나오더군요...
//
// AppDelegate.m
// dbtest002
//
// Created by ChanSeob Lee on 12. 7. 17..
// Copyright (c) 2012년 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import <sqlite3.h>
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *databaseName = @"db.sqlite";
//도큐먼트 디렉토리 위치를 얻는다.
NSString* documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
//도큐먼트 위치에 db.sqlite명으로 파일패스 설정
NSString *filePath = [documentDirectory stringByAppendingPathComponent:databaseName];
NSFileManager *fileManager = [NSFileManager defaultManager];
// 도큐먼트에 .sqlite 파일 복사
BOOL dbexits = [fileManager fileExistsAtPath:filePath];
if (!dbexits)
{
NSString *defaultDBPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:databaseName];
NSError *error;
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:filePath error:&error];
if (!success) {
NSAssert1(0,@"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
// 데이터베이스를 연결한다. 해당 위치에 데이터베이스가 없을경우에는 생성해서 연결한다.
sqlite3 *database;
if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
NSLog(@"Error");
}
// 테이블 생성
char *sql = "CREATE TABLE IF NOT EXISTS test (no INTEGER PRIMARY KEY NOT NULL, name VARCHAR)";
if (sqlite3_exec(database, sql, nil,nil,nil) != SQLITE_OK) {
sqlite3_close(database);
NSLog(@"Error");
}
// // 삽입 및 갱신
// sqlite3_stmt *insertStatement;
// char *insertSql = "INSERT or REPLACE INTO test (no,name) VALUES(?,?)";
//
// //프리페어 스테이트먼트를 사용
// if (sqlite3_prepare_v2(database, insertSql, -1, &insertStatement, NULL) == SQLITE_OK) {
//
// //?에 데이터를 바인드
// sqlite3_bind_int(insertStatement, 1, 1);
// sqlite3_bind_text(insertStatement, 2, [@"홍길동" UTF8String], -1, SQLITE_TRANSIENT);
//
// // sql문 실행
// if (sqlite3_step(insertStatement) != SQLITE_DONE) {
// NSLog(@"Error");
//
// }
// }
// select
sqlite3_stmt *selectStatement;
char *selectSql = "SELECT no, name FROM test";
if (sqlite3_prepare_v2(database, selectSql, -1, &selectStatement, NULL) == SQLITE_OK) {
// while문을 돌면서 각 레코드의 데이터를 받아서 출력한다.
while (sqlite3_step(selectStatement)==SQLITE_ROW) {
int no = sqlite3_column_int(selectStatement, 0);
NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 1) ];
NSLog(@"no : %i, name : %@",no,name);
}
}
//statement close
// sqlite3_finalize(insertStatement);
sqlite3_finalize(selectStatement);
//db close
sqlite3_close(database);
[_window makeKeyAndVisible];
return YES;
}
@end
펌 : [http://keechanfa.tistory.com/entry/xCode-42-%EC%97%90%EC%84%9C-SQLite%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0]