C++Sqlite 3 사용 방법
SQLite 3 는 가 벼 운 내장 형 데이터베이스 엔진 일 뿐 자원 을 차지 하 는 것 이 매우 낮 고 처리 속도 가 Mysql 보다 빠 르 며 모 바 일 장치 에서 적당 한 데이터 액세스 에 사 용 됩 니 다.서버 프로 세 스 가 필요 하지 않 습 니 다.
SQL 문 구 는 SQL 작업 의 명령 입 니 다.우 리 는 C/C++로 데이터 베 이 스 를 방문 할 때 char*즉 C 문자열 로 SQL 문 구 를 저장 한 다음 에 해당 sqlite 3 라 이브 러 리 의 함 수 를 호출 하여 C 문자열 로 SQL 명령 을 수행 해 야 합 니 다.
상용 용어:표(table),필드(column,열,속성),기록(row,record).
|SQL(structured query language)문구
특징:대소 문 자 를 구분 하지 않 고 문장 마다'를 추가 합 니 다.결말
키워드:select,insert,update,delete,from,creat,where,desc,order,by,group,table,alter,view,index 등 데이터베이스 에 서 는 키워드 이름과 필드 를 사용 할 수 없습니다.
데이터 정의 문(DDL:Data Definition Language)
CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);
DROP TABLE IF EXISTS t_person;
데이터 조작 문(DML:Data Manipulation language)
INSERT INTO t_person (name, age) VALUES (' ', 22);
UPDATE t_person SET name = ' ', age = 10;
// name ,age 10。
UPDATE t_person SET age = 12 WHERE name = ' ';
// name age 12。
DELETE FROM t_person;
// 。
DELETE FROM t_person WHERE age = 25;
// age 25 。
DELETE FROM t_person WHERE age > 12 AND age < 15;
// 12 15 。
데이터 쿼 리 문(DQL:Data Query Language)
SELECT name, age FROM t_person WHERE age < 80;
SELECT * FROM t_person WHERE age < 80;
SELECT name, age nianling FROM t_person ren WHERE ren.age > 80 AND nianling < 90;
SELECT count(name) FROM t_person ren WHERE ren.age > 80;
SELECT count(*) FROM t_person ren WHERE ren.age > 80;
SELECT * FROM t_person WHERE age < 100 ORDER BY age DESC, name ASC;
// , 。
SELECT * FROM t_person WHERE age < 100 ORDER BY age DESC, name ASC LIMIT 3, 5;
// , , 。
SELECT * FROM t_person WHERE name like '% %';
저장 형식:integer(정형),real(부동 소수점 형),text(텍스트 문자열),blob(바 이 너 리 데이터).실제로 SQLite 는 유형 이 없고 표를 작성 할 때 성명 하 는 유형 은 프로그래머 간 의 교 류 를 편리 하 게 하기 위해 좋 은 프로 그래 밍 규범 이다.
필드 제약 조건:
CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL UNIQUE, age integer NOT NULL DEFAULT 30);
외부 키:외부 키 제약 을 이용 하여 표 와 표 간 의 관 계 를 만 들 수 있 습 니 다.보통 표 의 한 필드 이 고 다른 표 의 홈 키 필드 를 참조 합 니 다.
CREATE TABLE IF NOT EXISTS t_class (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL UNIQUE);
CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL, class_id integer NOT NULL, CONSTRAINT fk_student_class FOREIGN KEY (class_id) REFERENCES t_class(id));
SELECT t.name t_name, t.age t_age, tc.name c_name FROM t_student t, t_class tc WHERE t.class_id = tc.id;
//
SELECT * FROM t_student WHERE class_id = (SELECT id FROM t_class WHERE name = ' ');
//
|C/C++에 SQLite 3 사용1.C/C++프로젝트 환경 설정:sqlite3.lib 와 sqlite3.dll 을 가 져 옵 니 다.헤더 파일\#include
2.데이터 베 이 스 를 열거 나 만 듭 니 다.
sqlite3 *sql = NULL; //
const char * path = "..../test.db";// sql
// 。 , 。
// C 。
int result = sqlite3_open_v2(path, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
if (result == SQLITE_OK) {
std::clog << " ";
}
else {
std::clog << " ";
}
3.데 이 터 를 되 돌려 주지 않 는 SQL 문 구 를 실행 합 니 다(추가,삭제,변경).(업데이트,삭제 문 구 를 실행 하고 창 표를 실행 하 며 문 구 를 추가 하 는 것 은 기본적으로 유사 하 며 sql 문 구 를 변경 하면 됩 니 다.)
const char *sqlSentence = "INSERT INTO t_person(name, age) VALUES(' ', 22); "; //SQL
sqlite3_stmt *stmt = NULL; //stmt
// ――
//-1 SQL
int result = sqlite3_prepare_v2(sql, sqlSentence, -1, &stmt, NULL);
if (result == SQLITE_OK) {
std::clog<< " OK";
//
sqlite3_step(stmt);
}
else {
std::clog << " ";
}
// ,
sqlite3_finalize(stmt);
4.데 이 터 를 되 돌려 주 는 SQL 문 구 를 실행 합 니 다(검사).
const char *sqlSentence = "SELECT name, age FROM t_person WHERE age < 30;"; //SQL
sqlite3_stmt *stmt = NULL; // stmt
// ――
//-1 SQL
int result = sqlite3_prepare_v2(sql, sqlSentence, -1, &stmt, NULL);
if (result == SQLITE_OK) {
std::clog << " OK";
// sqlite3_step() ,stmt
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 0
const unsigned char *name = sqlite3_column_text(stmt, 0);
// 1
int age = sqlite3_column_int(stmt, 1);
//
std::clog << "name = " << name <<", age = "<< age;
}
}
else {
std::clog << " ";
}
// ,
sqlite3_finalize(stmt);
5,데이터베이스 닫 기:sqlite 3close_v2(sqlite3* sql)
if (sql) {
sqlite3_close_v2(sql);
sql = nullptr;
}
|SQLite 3 라 이브 러 리 함수 총화1.데이터베이스 열기
int sqlite3_open_v2(
const char *filename, //
sqlite3 **ppDb, //
int flags, //
const char *zVfs // , , NULL
);
그 속flags 매개 변 수 는 다음 과 같은 표지 가 있 습 니 다.
SQLITE_OPEN_NOMUTEX: ( )
SQLITE_OPEN_FULLMUTEX: 。
SQLITE_OPEN_SHAREDCACHE: 。
SQLITE_OPEN_PRIVATECACHE: 。
SQLITE_OPEN_READWRITE: 。
SQLITE_OPEN_CREATE: , 。
2.SQL 문장의 합 법성 검사(검색 전 준비)만약 문장 이 합 법 적 으로 컴 파일 되 어 통과 된다 면,문장 에 발생 하 는 명령 을 stmt 핸들 에 끼 워 넣 습 니 다.(이때 명령 을 실행 하지 않 았 습 니 다)
int sqlite3_prepare_v2(
sqlite3 *db, //
const char *zSql, // SQL
int nByte, // SQL
sqlite3_stmt **ppStmt, // stmt , SQL stmt
const char **pzTail
);
3.stmt 핸들 실행(stmt 핸들 에 저 장 된 명령 실행)명령 이 다음 줄 의 데 이 터 를 조회 할 수 있다 면 SQLITE 로 돌아 갑 니 다.ROW
명령(예 를 들 어 데 이 터 를 기록 하 는 것)이 데 이 터 를 반환 할 필요 가 없다 면 SQLITE 를 반환 합 니 다.DONE
int sqlite3_step(
sqlite3_stmt* stmt //stmt
);
4.stmt 핸들 을 이용 하여 제 icol 필드 의 값 을 얻 습 니 다(필드 의 아래 표 시 는 0 부터)//검색 핸들 을 실행 하면 stmt 는 찾 은 데 이 터 를 가리 킵 니 다.
//그리고 stmt 를 통 해 해당 데 이 터 를 얻 을 수 있 습 니 다.
double sqlite3_column_double(sqlite3_stmt*, int iCol); //
int sqlite3_column_int(sqlite3_stmt*, int iCol); //
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); //
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); //
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); //
기타:구문 핸들 정리(같은 stmt 핸들 을 중복 사용 할 수 있 도록)
int sqlite3_finalize(
sqlite_stmt* stmt //stmt
);
데이터베이스 연결 닫 기
int sqlite3_close_v2(
sqlite3 * sql, //
);
SQL 문 구 를 직접 컴 파일 하고 실행 합 니 다.(추천 하지 않 습 니 다:1.SQL 문법 검사 가 없습니다.2.모든 SQL 문 구 는 똑 같 더 라 도 다시 컴 파일 하여 실 행 됩 니 다.대량 명령 에 효율 이 높 지 않 습 니 다.)
int sqlite3_exec(
sqlite3* sql, //
const char * sqlSentence, // SQL
int (*callback)(void*,int,char**,char**), // SQL
void *, // 1
char **errmsg //
);
|추가:SQLiteStudio 도 구 를 사용 하여 보좌 합 니 다.SQLiteStudio 는 시각 화 된 데이터베이스 관리 도구 입 니 다.
시각 화 된 인터페이스 를 통 해 데이터베이스 정 보 를 편리 하고 신속하게 조회 하거나 조작 할 수 있다.
이것 은 프로그램 sqlite 데이터 디 버 깅 검사 가 불가 하거나 부족 한 보조 도구 입 니 다.
(화면 은 그림:)
SQLiteStudio 다운로드 주소:https://www.jb51.net/database/132497.html
이상 은 C++Sqlite 3 의 사용 방법 에 대한 상세 한 내용 입 니 다.C+Sqlite 3 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 원활 공사 & & 원활 공사 (차 트 법)모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.