SQLite, C언어, SELECT 테스트
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
- 테이블
- 실행결과