English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 장에서는 C / C ++프로그램에서 SQLite를 사용합니다.
우리의 C / C ++SQLite를 사용하기 전에 컴퓨터에 SQLite 라이브러리를 설정해야 합니다. 설치 과정에 대해 'SQLite 설치' 장을 참조하세요.
아래는 중요한 C / C ++ SQLite 인터페이스 예제는, C에서 사용할 수 있는 모든 기능을 충분히 제공합니다. / C ++프로그램이 SQLite 데이터베이스를 사용하는 요구사항입니다. 더 복잡한 애플리케이션을 찾고 계신다면 SQLite 공식 문서를 참조하세요.
순번 | API 및 설명 |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) 이 절차는 SQLite 데이터베이스 파일과의 연결을 열고, 다른 SQLite 절차에서 사용할 수 있는 데이터베이스 연결 객체를 반환합니다. 만약filename매개변수가 NULL이거나 'memory:'라면 sqlite3_open()는 RAM에서 메모리 데이터베이스를 생성하여, 세션 중에만 존속하는 데이터베이스를 생성합니다. 파일 이름이 NULL이 아니면 sqlite3_open()는 값을 사용하여 데이터베이스 파일을 열려고 시도합니다. 파일이 존재하지 않으면 sqlite3_open()는 새로운 데이터베이스 파일을 열어서 열기에 성공하면 데이터베이스 파일을 열습니다. |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 이 예제는 sql 매개변수를 통해 제공된 SQL 명령어를 빠르고 간편하게 실행할 수 있는 방법을 제공합니다. 여러 SQL 명령어를 하나의 매개변수로 구성할 수 있습니다. 여기서 첫 번째 매개변수sqlite3는 열린 데이터베이스 객체입니다sqlite_callback는回调 함수로, 다음과 같습니다데이터첫 번째 매개변수이며, 절차에서 발생할 수 있는 모든 오류를 포착하기 위해 errmsg을 반환합니다. sqlite3_exec() 절차를 분석하고 실행합니다sql매개변수에 주어진 각 명령어를 문자열 끝에 도달하거나 오류가 발생할 때까지 처리합니다. |
3 | sqlite3_close(sqlite3*) 이 예제는 sqlite를 호출하여 이전에 닫힌3열린 데이터베이스 연결_open()을 열기 전에 모든 준비된 문장이 완료되어야 합니다 미완료된 쿼리가 남아 있으면 sqlite3_close()은 SQLITE_BUSY를 반환하고, 미완료된 문장으로 인해 오류 메시지가 닫히지 않습니다 |
다음 C 코드 단락은 기존 데이터베이스에 연결하는 방법을 보여줍니다. 데이터베이스가 존재하지 않으면 해당 데이터베이스가 생성되고 마지막으로 데이터베이스 객체가 반환됩니다
#include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "데이터베이스 성공적으로 열림\n"); } sqlite3_close(db); }
이제, 위 프로그램을 컴파일하고 실행하여test.db현재 디렉토리에서 데이터베이스를 생성합니다. 필요에 따라 경로를 변경할 수 있습니다.
$gcc test.c -l sqlite3 $./a.out 데이터베이스 성공적으로 열림
C를 사용하려면 ++소스 코드를 컴파일하려면 다음과 같이 코드를 컴파일할 수 있습니다-
$g++ test.c -l sqlite3
여기서는 프로그램을 sqlite와 연결합니다3라이브러리는 C 프로그램이 필요한 기능을 제공하기 위해 연결되었습니다. 이는您的目录에서 데이터베이스 파일 test.db를 생성하며, 다음과 같은 결과를 얻을 수 있습니다.
-rwxr-xr-x. 1 root root 7383 May 8 02:06 a.out -rw-r--r--. 1 root root 323 May 8 02:05 test.c -rw-r--r--. 1 root root 0 May 8 02:06 test.db
다음 C 코드 단락은 이전에 생성된 데이터베이스에서 테이블을 생성하는 데 사용됩니다-
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /*Database open*/ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "데이터베이스 성공적으로 열림\n"); } /* SQL 문 생성 */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR("50)," \ "SALARY REAL ");; /* SQL 문장 실행 */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "테이블 생성 성공\n"); } sqlite3_close(db); return 0; }
위 프로그램을 컴파일하고 실행하면 test.db에 COMPANY 테이블이 생성되며, 파일의 최종 목록은 다음과 같습니다-
-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db
다음 C 코드 단락은 위의 예제에서 생성된 COMPANY 테이블에 기록을 생성하는 방법을 보여줍니다-
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* 데이터베이스 열기 */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database successfully opened\n"); } /* SQL 문 생성 */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES ("1, 'Paul', 32, 'California', 20000.00 )" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES ("2, 'Allen', 25, 'Texas', 15000.00 )" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES ("3, 'Teddy', 23, 'Norway', 20000.00 )" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES ("4, 'Mark', 25, 'Rich',-Mond', 65000.00 );"; /* SQL 문장 실행 */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "기록이 성공적으로 생성되었습니다\n"); } sqlite3_close(db); return 0; }
위의 프로그램을 컴파일하고 실행하면 COMPANY 테이블에 주어진 기록이 생성되고 다음 두 행이 표시됩니다-
데이터베이스가 성공적으로 열렸습니다 기록이 성공적으로 생성되었습니다
실제 예제를 통해 기록을 가져오기 전에, 콜백 함수에 대해 사용되는 몇 가지 세부 사항을 살펴보겠습니다. 이 콜백은 SELECT 문에서 결과를 가져오는 방법을 제공합니다. 다음과 같은 선언을 가지고 있습니다-
typedef int (*sqlite3_callback)( void*, /* sqlite3_exec()의4파라미터로 제공된 데이터 */ int, /* 행의 열 수 */ char**, /* 행의 필드를 나타내는 문자열 배열 */ char** /* 컬럼 이름을 나타내는 문자열 배열 */ );
위의 콜백이 sqlite_exec() 절차에서 세 번째 매개변수로 제공되면 SQLite는 SQL 매개변수 내에서 실행된 각 SELECT 문에 대해 처리되는 각 기록에 대해 이 콜백 함수를 호출합니다.
다음 C 코드 부분은 예제에서 생성된 COMPANY 테이블에서 기록을 가져오고 표시하는 방법을 보여줍니다.-
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Database open */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database successfully opened\n"); } /* SQL 문 생성 */ sql = "SELECT" * from COMPANY"; /* SQL 문장 실행 */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "작업이 성공적으로 완료되었습니다\n"); } sqlite3_close(db); return 0; }
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
데이터베이스가 성공적으로 열렸습니다 콜백 함수 호출됨: ID = 1 NAME = Paul AGE = 32 ADDRESS = 캘리포니아 SALARY = 20000.0 콜백 함수 호출됨: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 콜백 함수 호출됨: ID = 3 NAME = Teddy AGE = 23 ADDRESS = 노르웨이 SALARY = 20000.0 콜백 함수 호출됨: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-월요일 SALARY = 65000.0 작업이 성공적으로 완료되었습니다
다음 C 코드 부분은 UPDATE 문을 사용하여 어떤 기록을 업데이트하고 COMPANY 테이블에서 업데이트된 기록을 가져오고 표시하는 방법을 보여줍니다.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* 데이터베이스 열기 */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database successfully opened\n"); } /*합병 SQL 문장 생성*/ sql = "UPDATE COMPANY set SALARY =" 25000.00에서 ID=1; " \ "SELECT * from COMPANY"; /* SQL 문장 실행 */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
데이터베이스가 성공적으로 열렸습니다 콜백 함수 호출됨: ID = 1 NAME = Paul AGE = 32 ADDRESS = 캘리포니아 SALARY = 25000.0 콜백 함수 호출됨: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 콜백 함수 호출됨: ID = 3 NAME = Teddy AGE = 23 ADDRESS = 노르웨이 SALARY = 20000.0 콜백 함수 호출됨: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-월요일 SALARY = 65000.0 운영이 성공적으로 완료되었습니다
아래 C 코드 부분은 DELETE 문장을 사용하여 어떤 기록도 제거하고, 나머지 기록을 COMPANY 테이블에서 가져와 표시하는 방법을 보여줍니다.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName) { int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Database open */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database successfully opened\n"); } /* 합병 SQL 문장 생성 */ sql = "DELETE from COMPANY where ID=",2; " \ "SELECT * from COMPANY"; /* SQL 문장 실행 */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
데이터베이스가 성공적으로 열렸습니다 콜백 함수 호출됨: ID = 1 NAME = Paul AGE = 32 ADDRESS = 캘리포니아 SALARY = 20000.0 콜백 함수 호출됨: ID = 3 NAME = Teddy AGE = 23 ADDRESS = 노르웨이 SALARY = 20000.0 콜백 함수 호출됨: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-월요일 SALARY = 65000.0 운영이 성공적으로 완료되었습니다