'DataBase/SQLite'에 해당되는 글 2건

  1. 2012.10.29 xcode 에서 sqlite3 사용하기
  2. 2012.08.30 SQLite 받는 곳
DataBase/SQLite2012. 10. 29. 11:28

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]

'DataBase > SQLite' 카테고리의 다른 글

SQLite 받는 곳  (0) 2012.08.30
Posted by NeverTry
DataBase/SQLite2012. 8. 30. 13:05

'DataBase > SQLite' 카테고리의 다른 글

xcode 에서 sqlite3 사용하기  (0) 2012.10.29
Posted by NeverTry