C++Sqlite 3 사용 방법

10988 단어 c + +Sqlite3
|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)
  • 새 표 는 10233 입 니 다.create:create table 표 이름(필드 이름 1 필드 형식 1,필드 이름 2 필드 형식 2,...);create table if not exists 표 이름(필드 이름 1 필드 유형 1,필드 이름 2 필드 유형 2,...);
  • 
    CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL); 
  • 표 삭제:dorp table 표 이름;표 이름 이 존재 하 는 경우 드 롭 테이블;
  • 
    DROP TABLE IF EXISTS t_person;
    데이터 조작 문(DML:Data Manipulation language)
  • 표 에 있 는 데 이 터 를 추가 합 니 다.insert:insert into 표 이름(필드 1,필드 2,...)values(필드 1 의 값,필드 2 의 값);문자열 내용 은 작은 따옴표 로 되 어 있 습 니 다.
  • 
    INSERT INTO t_person (name, age) VALUES ('  ', 22); 
  • 수정 표 의 데 이 터 는 10233°update:update 표 이름 set 필드 1=필드 1 의 값,필드 2=필드 2 의 값,...
  • 
    UPDATE t_person SET name = '  ', age = 10; 
    //    name          ,age        10。 
    
    UPDATE t_person SET age = 12 WHERE name = '  '; 
    //    name       age   12。 
  • 표 의 데 이 터 를 삭제 합 니 다.delete:delete from 표 이름;delete from 표 이름 where 필드=필드 값.
  • 
    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:select 필드 1,필드 2,...시계 이름 에서select 필드 1,필드 2...from 표 이름 where 필드=어떤 값;표 이름 에서 선택*;(모든 필드 조회)
  • 표 별명:select 필드 1 별명,필드 2 별명...시계 이름 별명 에서select 필드 1 별명,필드 2 as 별명...from 시계 이름 as 별명;select 별명.필드 1,별명.필드 2...from 시계 이름 별명;
  • 
    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(필드 또는*)from 표 이름;
  • 
     SELECT count(name) FROM t_person ren WHERE ren.age > 80; 
    
       SELECT count(*) FROM t_person ren WHERE ren.age > 80; 
    
  • where:where 필드=특정한 값;where 필드 is 모 값;where 필드!=어떤 값;where 필드 is not 어떤 값;where 필드>어떤 값;where 필드 1=모 값 1 and 필드 2<모 값 2;where 필드 1=특정한 값 1 or 필드 2>특정한 값 2;
  • order by:select*표 이름 order by 필드(기본 오름차 순)에서;select*표 이름 order by 필드 desc(내림차 순);select*표 이름 order by 필드 asc(오름차 순);select*from 표 명 order by 필드 1 asc(필드 1 로 올 라 가기),필드 2 desc(필드 2 로 내 려 가기);
  • 
    SELECT * FROM t_person WHERE age < 100 ORDER BY age DESC, name ASC; 
    //       ,      。
  • limit:select*표 명 limit 수치 1,수치 2 에서;페이지 별로 조회 하면 수치 1 은 앞의 몇 개 를 건 너 뛰 는 것 을 나타 내 고 수치 2 는 꺼 낸 후에 몇 개 를 나타 낸다.select*표 명 limit 수치 2;(앞의 0 개 를 건 너 뛰 면 select*from 표 명 limit 0,수치 2 에 해당 하 며 맨 앞 에 몇 개의 데 이 터 를 표시 합 니 다)
  • 
     SELECT * FROM t_person WHERE age < 100 ORDER BY age DESC, name ASC LIMIT 3, 5;
     //    ,   ,   。 
  • like:모호 조회,select 필드 1,필드 2...from 표 이름 where 필드 like%모 값%;
  • 
    SELECT * FROM t_person WHERE name like '% %'; 
    저장 형식:integer(정형),real(부동 소수점 형),text(텍스트 문자열),blob(바 이 너 리 데이터).
    실제로 SQLite 는 유형 이 없고 표를 작성 할 때 성명 하 는 유형 은 프로그래머 간 의 교 류 를 편리 하 게 하기 위해 좋 은 프로 그래 밍 규범 이다.
    필드 제약 조건:
  • not null:필드 의 값 이 비어 있 으 면 안 됩 니 다.
  • unique:필드 의 값 이 유일 해 야 합 니 다.
  • default:필드 의 기본 값 을 지정 합 니 다.
  • primary key:메 인 키 는 특정한 기록 을 유일 하 게 표시 하 는 데 사용 되 며 기 록 된 신분증 에 해당 합 니 다.메 인 키 는 하나 이상 의 필드 일 수 있 으 며 컴퓨터 가 자동 으로 생 성하 고 관리 해 야 합 니 다.홈 키 필드 는 기본적으로 not null 과 unique 두 개의 제약 조건 을 포함 합 니 다.
  • autoincrement:메 인 키 가 integer 형식 일 때 autoincrement 제약 을 증가 하여 메 인 키 의 자동 성장 을 실현 해 야 합 니 다.
  • 
    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);
  • 외부 키 가 있 는 시 계 를 만 듭 니 다:tstudent 표 중 에 fk 라 는 게 있어 요.student_class 의 외 키,이 외 키 의 역할 은 tstudent 표 의 classid 필드 참조 tclass 표 의 id 필드 입 니 다.
  • 
       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 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기