SQLite는 - C / C ++
설치
SQLite는 사용하기 전에 C / C ++ 프로그램에서, 우리는 기계에 SQLite는 도서관이 있는지 확인해야합니다. 설치 프로세스에 대한 SQLite는 설치 섹션을 볼 수 있습니다.
C / C ++ 인터페이스 API
는 C / C ++ 프로그램에서 SQLite는 데이터베이스를 사용하여 사용자의 요구를 충족시킬 수있는 중요한 C & C ++ / SQLite는 인터페이스 프로그램은 다음과 같습니다. 더 자세한 내용이 필요하면 공식 SQLite는 설명서를 참조하시기 바랍니다.
序号 | API & 描述 |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。 |
3 | sqlite3_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 작업이 성공적으로 완료