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




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


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

댓글 없음:

댓글 쓰기

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

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....