DB 데이터 생성 스크립트

CREATE TABLE Members (
	code INTEGER PRIMARY KEY AUTOINCREMENT,
	id TEXT(12),
	pw TEXT(18),
	fname TEXT,
	lname TEXT,
	ph TEXT,
	email TEXT,
	disabled NUMERIC
);

INSERT INTO Members
(code, id, pw, fname, lname, ph, email, disabled)
VALUES
(1, 'aaa', '1111', 'Richard', 'Choi', '010-1234', 'abcd@a.com', 0),
(2, 'bbb', '222', 'Olivia', 'Kim', '017-9999', 'zz@b.com', 0),
(3, 'ccc', '33', 'Rose', 'Park', '019-6788', 'vvv@c.com', 1),
(4, 'd', '4', 'C++', 'Lee', '054-123', 'a@a.com', 0),
(5, 'e', '55', 'Python', 'Ryu', '02-88', 'b@b.com', 0),
(6, 'f', '666', 'Java', 'Jo', '070-876', 'c@c.com', 1);

C 언어 테스트

  • DB 경로 변경 할 것
#include <sqlite3.h>
#include <stdio.h>

// sqlite 핵심 함수
// sqlite3_open()  : 1. DB 연결 생성
// sqlite3_exec()  : 2. DB 쿼리 실행. sqlite3_prepare_v2(), sqlite3_step(), sqlite3_finalize() 세 함수를 묶은 편리한 함수
// sqlite3_close() : 3. DB 연결 종료. 데이터베이스의 lock이 해제, 연결된 핸들러 객체 파괴

int callback(void *, int, char **, char **); // 콜백 함수, 쿼리 실행 결과값을 받아온다.
int cnt = 0; // 콜백 함수 실행 횟수 체크

int main(void)
{
    // 1
    // sqlite3* db; 커넥션 정보를 갖고 있는 객체(DB 핸들로 표현)
    // sqlite3 객체는 sqlite3_open() 함수를 호출하여 생성하며,sqlite3_close() 함수를 통해 연결을 닫으면서 해제된다.
    sqlite3 *db;
    char *err_msg = 0;

    // SQLite DB 파일 경로 사용
    int rc = sqlite3_open("/home/basiclike/VSCode/test/DB/DB_SQLite", &db);

    if (rc != SQLITE_OK)
    {
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);

        return 1;
    }

    // 2
    // 쿼리 실행
    char *sql = "SELECT * FROM Members";
    rc = sqlite3_exec(db, sql, callback, 0, &err_msg); // callback 함수를 행의 개수만큼 반복 실행한다.

    if (rc != SQLITE_OK)
    {
        fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);

        return 1;
    }

    // 3
    // DB 연결 종료
    sqlite3_close(db);

    return 0;
}

// 콜백 함수는, 행의 개수만큼 반복 실행된다.
int callback(
    void *NotUsed,    // sqlite3_exec 에서 4번째 인자의 값
    int argc,         // 테이블 컬럼(열)의 개수
    char **argv,      // 테이블에서 불러온 1개의 행에 해당하는 값이 배열로 들어있다.
    char **azColName) // 컬럼의 이름
{
    NotUsed = 0;
    ++cnt; // 콜백 함수의 실행 횟수 카운트 
    printf("%d번째 로우, 컬럼은 %d개 입니다.\n", cnt, argc);

    for (int i = 0; i < argc; i++)
    {
        printf("%d번째 컬럼: %10s = %s\n", i+1, azColName[i], argv[i] ? argv[i] : "NULL");
    }

    printf("\n");

    return 0;
}

C언어 컴파일

  • -l 옵션 : 같이 링크할 라이브러리를 지정한다.
gcc db_create.c -o db_create -l sqlite3
  • 테이블

  • 실행결과