Latest web development tutorials

SQLite는 - C / C ++

설치

SQLite는 사용하기 전에 C / C ++ 프로그램에서, 우리는 기계에 SQLite는 도서관이 있는지 확인해야합니다. 설치 프로세스에 대한 SQLite는 설치 섹션을 볼 수 있습니다.

C / C ++ 인터페이스 API

는 C / C ++ 프로그램에서 SQLite는 데이터베이스를 사용하여 사용자의 요구를 충족시킬 수있는 중요한 C & C ++ / SQLite는 인터페이스 프로그램은 다음과 같습니다. 더 자세한 내용이 필요하면 공식 SQLite는 설명서를 참조하시기 바랍니다.

序号API & 描述
1sqlite3_open(const char *filename, sqlite3 **ppDb)

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。

在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。

3sqlite3_close(sqlite3*)

该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。

如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

데이터베이스에 연결

다음 C 코드는 기존 데이터베이스에 연결하는 방법을 보여줍니다. 데이터베이스가 존재하지 않는 경우, 생성하고, 마지막으로 데이터베이스 객체를 반환한다.

사용법 #include <STDIO.H>
사용법 #include <sqlite3.h>

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;

   RC = sqlite3_open ( "의 test.db", dB);

   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (열려진, "열린 데이터베이스가 성공적으로 N을 \");
   }
   sqlite3_close (dB);
}

이제 컴파일하고 위의 프로그램을 실행, 현재 디렉토리에 저희데이터베이스의 test.db를 만들 수 있습니다.필요에 따라 경로를 변경할 수 있습니다.

$ GCC TEST.C -l sqlite3를
$. / a.out의
열린 데이터베이스를 성공적으로

다음 코드에 따라 컴파일 할 수있는 C ++ 소스 코드를 사용하려면 보여줍니다

$ G ++ TEST.C -l sqlite3를

여기서, C 프로그램에 대한 우리의 프로그램 링크 sqlite3를 라이브러리는 필요한 기능을 제공합니다. 이렇게하면 다음과 같은 결과를 얻을 것이다, 당신의 디렉토리에 데이터베이스 파일의 test.db을 생성합니다 :

-rwxr-XR-X. 1 루트 루트 7383 5월 8일 2시 6분의 a.out
-rw-R - r-- 사용 1 루트 루트 323 5월 8일 2시 5분 test.c.
-rw-R - r-- 사용 1 루트 루트 0 5월 8일 2시 6분 test.db.

테이블 만들기

다음 C 코드는 이전에 만든 데이터베이스에서 테이블을 만드는 데 사용됩니다

사용법 #include <STDIO.H>
사용법 #include <인 stdlib.h>
사용법 #include <sqlite3.h> 

정적 INT 콜백 (무효 * NOTUSED, INT는 argc, 문자 ** argv를, 문자 ** azColName) {
   내가 int로;
   용 (전 = 0; 나는 & LT;는 argc, 내가 ++) {
      의 printf ( "%의 = %의 \ 없음", azColName [i]를, 변수는 argv [i]는 변수는 argv [I] : "NULL");
   }
   의 printf ( "\ n을");
   0을 반환;
}

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;
   숯불 *의 SQL;

   / * 오픈 데이터베이스 * /
   RC = sqlite3_open ( "의 test.db", dB);
   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (표준 출력, "열린 데이터베이스가 성공적으로 N을 \");
   }

   / * SQL 문을 생성 * /
   SQL = \ "(TABLE 회사 만들기"
         "ID INT PRIMARY KEY NULL NOT"\
         "이름 텍스트 NULL NOT"\
         "NULL NOT 나이 INT,"\
         "주소의 CHAR (50),"\
         "SALARY의 REAL);";

   / * SQL 문을 실행 * /
   RC = sqlite3_exec (DB, SQL, 콜백, 0, zErrMsg);
   경우 (RC! = SQLITE_OK) {
   fprintf와 (표준 오류 "SQL 오류 : %의 \ 없음", zErrMsg);
      sqlite3_free (zErrMsg);
   } 그밖에 {
      fprintf와는 (표준 출력, "표 N을 \ 성공적으로 생성");
   }
   sqlite3_close (dB);
   0을 반환;
}

상기 프로그램은 컴파일되고 실행되는 경우, 다음과 같이 그것은의 test.db 파일 최종 파일 목록 COMPANY 테이블을 작성

-rwxr-XR-X. 1 루트 루트 9567 5월 8일 2시 31분의 a.out
-rw-R - r-- 사용 1 루트 루트 1207 5월 8일 2시 31분 test.c.
-rw-R - r-- 사용 1 루트 루트 3072 5월 8일 2시 31분 test.db.

INSERT 작업

다음 C 코드는 위에서 만든 회사 테이블에 레코드를 만드는 방법을 보여줍니다 :

사용법 #include <STDIO.H>
사용법 #include <인 stdlib.h>
사용법 #include <sqlite3.h>

정적 INT 콜백 (무효 * NOTUSED, INT는 argc, 문자 ** argv를, 문자 ** azColName) {
   내가 int로;
   용 (전 = 0; 나는 & LT;는 argc, 내가 ++) {
      의 printf ( "%의 = %의 \ 없음", azColName [i]를, 변수는 argv [i]는 변수는 argv [I] : "NULL");
   }
   의 printf ( "\ n을");
   0을 반환;
}

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;
   숯불 *의 SQL;

   / * 오픈 데이터베이스 * /
   RC = sqlite3_open ( "의 test.db", dB);
   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (열려진, "열린 데이터베이스가 성공적으로 N을 \");
   }

   / * SQL 문을 생성 * /
   SQL = "회사로 INSERT (ID, 이름, 나이, 주소, SALARY)"\
         "VALUES (1, '폴', 32 '캘리포니아', 20000.00);"\
         \ "회사로 (ID, 이름, 나이, 주소, SALARY)를 삽입"
         "VALUES (2, '알렌', 25 일 '텍사스', 15000.00);"\
         \ "회사로 (ID, 이름, 나이, 주소, SALARY)를 삽입"
         "VALUES (3 '테디', 23 ', 노르웨이, 20000.00);"\
         \ "회사로 (ID, 이름, 나이, 주소, SALARY)를 삽입"
         "VALUES (4, '마크', 25 일 '리치 사교계', 65000.00);";

   / * SQL 문을 실행 * /
   RC = sqlite3_exec (DB, SQL, 콜백, 0, zErrMsg);
   경우 (RC! = SQLITE_OK) {
      fprintf와 (표준 오류 "SQL 오류 : %의 \ 없음", zErrMsg);
      sqlite3_free (zErrMsg);
   } 그밖에 {
      fprintf와 (표준 출력, "N을 \ 성공적으로 만들어 기록");
   }
   sqlite3_close (dB);
   0을 반환;
}

위의 프로그램을 컴파일하고 실행되면 특정 레코드에 대한 회사 테이블에 만들고 다음 두 줄을 표시합니다 :

열린 데이터베이스를 성공적으로
기록이 성공적으로 생성

SELECT 작업

우리는 문서화 된 예를 설명하기 시작하기 전에 우리가 먼저 우리의 예를 사용하는 것입니다 콜백 함수의 세부 사항 중 일부를 이해 할 수 있습니다. 이 콜백은 SELECT 문 방법에서 얻은 결과를 제공합니다. 다음과 같이 선언한다 :

타입 정의의 INT (* sqlite3_callback ()
sqlite3_exec의 4 번째 인수 (제공 무효 * / * 데이터) * /
INT, / * 행의 열 수 * /
문자 ** / * 행의 필드를 나타내는 문자열의 배열 * /
문자 ** / * 열 이름을 나타내는 문자열의 배열 * /
);

sqlite_exec () 프로 시저의 세 번째 매개 변수로 위의 콜백은, 각 SELECT 문 실행 과정의 매개 변수 내에서 각 레코드에 대한 SQLite는 SQL 콜백 함수를 호출합니다.

다음 C 코드는 이전에 만든 회사 테이블에서 가져 오는 방법을 보여줍니다 및 레코드를 표시합니다 :

사용법 #include <STDIO.H>
사용법 #include <인 stdlib.h>
사용법 #include <sqlite3.h>

정적 INT 콜백 (무효 * 데이터 INT의는 argc, 문자 ** argv를, 문자 ** azColName) {
   내가 int로;
   fprintf와 (열려진, "% S"(const를 숯불 *) 데이터);
   용 (전 = 0; 나는 & LT;는 argc, 내가 ++) {
      의 printf ( "%의 = %의 \ 없음", azColName [i]를, 변수는 argv [i]는 변수는 argv [I] : "NULL");
   }
   의 printf ( "\ n을");
   0을 반환;
}

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;
   숯불 *의 SQL;
   const를 숯불 * 데이터 = "콜백 함수가 호출";

   / * 오픈 데이터베이스 * /
   RC = sqlite3_open ( "의 test.db", dB);
   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (열려진, "열린 데이터베이스가 성공적으로 N을 \");
   }

   / * SQL 문을 생성 * /
   SQL = "회사에서 SELECT *";

   / * SQL 문을 실행 * /
   RC = sqlite3_exec (DB, SQL, 콜백, (무효 *) 데이터, zErrMsg);
   경우 (RC! = SQLITE_OK) {
      fprintf와 (표준 오류 "SQL 오류 : %의 \ 없음", zErrMsg);
      sqlite3_free (zErrMsg);
   } 그밖에 {
      fprintf와는 (표준 출력, "작업 N을 \ 성공적으로 완료");
   }
   sqlite3_close (dB);
   0을 반환;
}

상기 프로그램은 컴파일되고 실행될 때, 다음과 같은 결과를 생성한다 :

열린 데이터베이스를 성공적으로
라는 콜백 기능 : ID = 1
NAME = 폴
AGE = 32
ADDRESS = 캘리포니아
SALARY = 20000.0

라는 콜백 기능 : ID = 2
NAME = 앨런
AGE = 25
ADDRESS = 텍사스
SALARY = 15000.0

라는 콜백 기능 : ID = 3
NAME = 테디
AGE = 23
ADDRESS = 노르웨이
SALARY = 20000.0

라는 콜백 기능 : ID = 4
NAME = 마크
AGE = 25
ADDRESS = 리치 사교계
SALARY = 65000.0

작업이 성공적으로 완료

UPDATE 작업

다음 C 코드는 다음 레코드를 업데이트 COMPANY 테이블에서 얻을 업데이트 된 레코드를 표시하려면 UPDATE 문을 사용하는 방법을 보여줍니다

사용법 #include <STDIO.H>
사용법 #include <인 stdlib.h>
사용법 #include <sqlite3.h> 

정적 INT 콜백 (무효 * 데이터 INT의는 argc, 문자 ** argv를, 문자 ** azColName) {
   내가 int로;
   fprintf와 (열려진, "% S"(const를 숯불 *) 데이터);
   용 (전 = 0; 나는 & LT;는 argc, 내가 ++) {
      의 printf ( "%의 = %의 \ 없음", azColName [i]를, 변수는 argv [i]는 변수는 argv [I] : "NULL");
   }
   의 printf ( "\ n을");
   0을 반환;
}

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;
   숯불 *의 SQL;
   const를 숯불 * 데이터 = "콜백 함수가 호출";

   / * 오픈 데이터베이스 * /
   RC = sqlite3_open ( "의 test.db", dB);
   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (열려진, "열린 데이터베이스가 성공적으로 N을 \");
   }

   / * 병합 된 SQL 문을 생성 * /
   SQL = "UPDATE 회사가 SALARY = 25000.00을 설정할 경우 ID = 1;"\
         "회사에서 SELECT *";

   / * SQL 문을 실행 * /
   RC = sqlite3_exec (DB, SQL, 콜백, (무효 *) 데이터, zErrMsg);
   경우 (RC! = SQLITE_OK) {
      fprintf와 (표준 오류 "SQL 오류 : %의 \ 없음", zErrMsg);
      sqlite3_free (zErrMsg);
   } 그밖에 {
      fprintf와는 (표준 출력, "작업 N을 \ 성공적으로 완료");
   }
   sqlite3_close (dB);
   0을 반환;
}

상기 프로그램은 컴파일되고 실행될 때, 다음과 같은 결과를 생성한다 :

열린 데이터베이스를 성공적으로
라는 콜백 기능 : ID = 1
NAME = 폴
AGE = 32
ADDRESS = 캘리포니아
SALARY = 25000.0

라는 콜백 기능 : ID = 2
NAME = 앨런
AGE = 25
ADDRESS = 텍사스
SALARY = 15000.0

라는 콜백 기능 : ID = 3
NAME = 테디
AGE = 23
ADDRESS = 노르웨이
SALARY = 20000.0

라는 콜백 기능 : ID = 4
NAME = 마크
AGE = 25
ADDRESS = 리치 사교계
SALARY = 65000.0

작업이 성공적으로 완료

DELETE 작업

다음 C 코드는 DELETE 문은 모든 레코드를 삭제 한 다음 회사 테이블에서 촬영하고 나머지 기록을 표시 사용하는 방법을 보여줍니다 :

사용법 #include <STDIO.H>
사용법 #include <인 stdlib.h>
사용법 #include <sqlite3.h> 

정적 INT 콜백 (무효 * 데이터 INT의는 argc, 문자 ** argv를, 문자 ** azColName) {
   내가 int로;
   fprintf와 (열려진, "% S"(const를 숯불 *) 데이터);
   용 (전 = 0; 나는 <는 argc, 내가 ++) {
      의 printf ( "%의 = %의 \ 없음", azColName [i]를, 변수는 argv [i]는 변수는 argv [I] : "NULL");
   }
   의 printf ( "\ n을");
   0을 반환;
}

int 주 (int argc, 문자의 *의 변수는 argv [])
{
   sqlite3를의 * DB를;
   문자 * zErrMsg = 0;
   INT의 RC;
   숯불 *의 SQL;
   const를 숯불 * 데이터 = "콜백 함수가 호출";

   / * 오픈 데이터베이스 * /
   RC = sqlite3_open ( "의 test.db", dB);
   경우 (RC) {
      fprintf와 (표준 오류 "열 수 없습니다 데이터베이스 %의 \ 없음", sqlite3_errmsg (dB));
      종료 (0);
   } 그밖에 {
      fprintf와 (열려진, "열린 데이터베이스가 성공적으로 N을 \");
   }

   / * 병합 된 SQL 문을 생성 * /
   SQL = "회사에서 삭제 어디 ID = 2;"\
         "회사에서 SELECT *";

   / * SQL 문을 실행 * /
   RC = sqlite3_exec (DB, SQL, 콜백, (무효 *) 데이터, zErrMsg);
   경우 (RC! = SQLITE_OK) {
      fprintf와 (표준 오류 "SQL 오류 : %의 \ 없음", zErrMsg);
      sqlite3_free (zErrMsg);
   } 그밖에 {
      fprintf와는 (표준 출력, "작업 N을 \ 성공적으로 완료");
   }
   sqlite3_close (dB);
   0을 반환;
}

상기 프로그램은 컴파일되고 실행될 때, 다음과 같은 결과를 생성한다 :

열린 데이터베이스를 성공적으로
라는 콜백 기능 : ID = 1
NAME = 폴
AGE = 32
ADDRESS = 캘리포니아
SALARY = 20000.0

라는 콜백 기능 : ID = 3
NAME = 테디
AGE = 23
ADDRESS = 노르웨이
SALARY = 20000.0

라는 콜백 기능 : ID = 4
NAME = 마크
AGE = 25
ADDRESS = 리치 사교계
SALARY = 65000.0

작업이 성공적으로 완료