2014년 11월 9일 일요일

아이폰 - SQLite3을 사용해서 만든 아이폰용 입력, 수정, 삭제, 검색 데모 코드 입니다.

SQLite3을 사용해서 만든 아이폰용 입력, 수정, 삭제, 검색 데모 코드 입니다. 조회 : 45
나의 폴더 > 아이폰 | 2012-12-13 (Thu) 11:21http://blog.dreamwiz.com/papasmf1/13911303
SQLite3을 사용해서 만든 아이폰용 입력, 수정, 삭제, 검색 데모 코드 입니다.
Xcode 4.5 기준으로 다시 작성했습니다.

//
//  ViewController.h
//  DemoDatabase
//
//  Created by JONG DUK KIM on 12. 12. 13..
//  Copyright (c) 2012 JONG DUK KIM. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <sqlite3.h>

@interface ViewController : UIViewController
{
    sqlite3 *contactDB;
    NSString *databasePath; 
}

@property (strongnonatomicIBOutlet UITextField *name;
@property (strongnonatomicIBOutlet UITextField *jobTitle;
@property (strongnonatomicIBOutlet UITextField *phone;
@property (strongnonatomicIBOutlet UITextField *address;
@property (strongnonatomicIBOutlet UILabel *status;
@property (strongnonatomicIBOutlet UILabel *myid;

-(IBAction)saveData:(id)sender;
-(IBAction)updateData:(id)sender;
-(IBAction)deleteData:(id)sender;
-(IBAction)findData:(id)sender;
//키보드 감추기 
-(IBAction)textFieldReturn:(id)sender;

@end

//
//  ViewController.m
//  DemoDatabase
//
//  Created by JONG DUK KIM on 12. 12. 13..
//  Copyright (c) 2012 JONG DUK KIM. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize name, jobTitle, address, phone;
@synthesize status;
@synthesize myid;

-(IBAction)textFieldReturn:(id)sender
{
    [sender resignFirstResponder]; 
}

-(IBAction)saveData:(id)sender
{
    sqlite3_stmt *statement;
    const char *dbpath = [databasePath UTF8String];
    
    if(sqlite3_open(dbpath, &contactDB) == SQLITE_OK) {
       NSString *insertSQL = [NSString stringWithFormat:
        @"INSERT INTO CONTACTS (NAME, TITLE, PHONE, ADDRESS) VALUES ( \"%@\", \"%@\", \"%@\", \"%@\")",name.textjobTitle.text,
            phone.textaddress.text];
        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);
        if(sqlite3_step(statement) == SQLITE_DONE)
        {
            status.text = @"주소록에 추가됨!";
            name.text = @"";
            jobTitle.text = @"";
            address.text = @"";
            phone.text = @"";
        } else {
            status.text = @"주소록 추가에 실패!";
        }
        sqlite3_finalize(statement);
        sqlite3_close(contactDB);
    }
}

-(IBAction)updateData:(id)sender
{
    sqlite3_stmt *statement;
    const char *dbpath = [databasePath UTF8String];
    
    if(sqlite3_open(dbpath, &contactDB) == SQLITE_OK) {
        NSString *updateSQL = [NSString stringWithFormat:
                               @"UPDATE CONTACTS SET NAME=\"%@\", TITLE=\"%@\", PHONE=\"%@\", ADDRESS=\"%@\" WHERE ID=%@"name.textjobTitle.text,
                               phone.textaddress.textmyid.text];
        const char *update_stmt = [updateSQL UTF8String];
        sqlite3_prepare_v2(contactDB, update_stmt, -1, &statement, NULL);
        if(sqlite3_step(statement) == SQLITE_DONE)
        {
            status.text = @"주소록 수정됨!";
            name.text = @"";
            jobTitle.text = @"";
            address.text = @"";
            phone.text = @"";
        } else {
            status.text = @"주소록 수정 실패!";
        }
        sqlite3_finalize(statement);
        sqlite3_close(contactDB);
    }

}

-(IBAction)deleteData:(id)sender
{
    sqlite3_stmt *statement;
    const char *dbpath = [databasePath UTF8String];
    
    if(sqlite3_open(dbpath, &contactDB) == SQLITE_OK) {
        NSString *deleteSQL = [NSString stringWithFormat:
                               @"DELETE FROM CONTACTS WHERE id=\"%@\"",
                               myid.text];
        const char *delete_stmt = [deleteSQL UTF8String];
        sqlite3_prepare_v2(contactDB, delete_stmt, -1, &statement, NULL);
        if(sqlite3_step(statement) == SQLITE_DONE)
        {
            status.text = @"주소록에서 삭제됨!";
            name.text = @"";
            jobTitle.text = @"";
            address.text = @"";
            phone.text = @"";
        } else {
            status.text = @"주소록 삭제 실패!";
        }
        sqlite3_finalize(statement);
        sqlite3_close(contactDB);
    }

}

-(IBAction)findData:(id)sender
{
    sqlite3_stmt *statement;
    const char *dbpath = [databasePath UTF8String];
    
    if(sqlite3_open(dbpath, &contactDB) == SQLITE_OK) {
        NSString *querySQL = [NSString stringWithFormat:
                              @"SELECT address, title, phone, id FROM contacts WHERE name=\"%@\"", name.text];
        const char *query_stmt = [querySQL UTF8String];
        if(sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
            if(sqlite3_step(statement) == SQLITE_ROW) {
                NSString *addressField = [[NSString alloc]
                                          initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
                address.text = addressField;
                
                NSString *titleField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)];
                jobTitle.text = titleField;
                
                NSString *phoneField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 2)];
                phone.text = phoneField;
                
                NSString *idField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 3)];
                myid.text = idField;
            } else {
                status.text = @"검색된 내용 없음!";
                address.text= @"";
                jobTitle.text = @"";
                phone.text = @"";
            }
            sqlite3_finalize(statement);
        }
        sqlite3_close(contactDB);
    }
    
}


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    //데이터베이스와 테이블을 생성한다.
    NSString *docsDir;
    NSArray *dirPaths;
    
    //Documets 디렉토리 확인하기 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
    
    //데이터베이스 파일 경우 구성
    databasePath = [[NSString alloc]
                    initWithString:[docsDir stringByAppendingPathComponent:@"contacts.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 CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, TITLE TEXT, PHONE TEXT, ADDRESS TEXT)";
            if(sqlite3_exec(contactDB, sql_stmt, NULLNULL, &errMsg) != SQLITE_OK)
            {
                status.text = @"테이블 생성 실패";
            }
            sqlite3_close(contactDB);
        } else {
            status.text = @"데이터베이스 오픈 또는 생성 실패!";
        }
        
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end




인터페이스 빌더에서 위와 같이 연결합니다.


실행하면 아래와 같이 실행됩니다.

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...