SQLITE 를 C++ 에서 사용하는 방법을 설명합니다.

우선 아래 사이트에서 SQLITE 최신버전(dll,source)을 다운 받습니다.

http://sqlite.org/download.html

글쓰는 시간 기준 최신 파일은 첨부합니다.

sqlite-amalgamation-3220000.zip

sqlite-dll-win64-x64-3220000.zip

 

위 두파일압축을 풀어

sqlite-amalgamation 쪽에 sqlite3.h 파일을 가져와 특정 폴더나 프로젝트 폴더에 갖다 놓습니다.

sqlite-dll 쪽에 sqlite3.def, sqlite3.dll 이 두파일이 있는데 이 두파일을 가지고 lib 파일을 만들어야합니다.

Developer Command Prompt for VS 2017 를 실행합니다.

(이름으로 검색하시거나 시작 메뉴에서 Visual Stuio 2017 의 하위 메뉴에 있습니다.)

위 두 파일이 있는 폴더로 이동하여 아래처럼 명령어를 실행하면 lib 파일이 만들어 집니다.

lib /def:sqlite3.def /machine:x64

아래는 커멘드 창의 내용입니다.

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.5.7
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************

C:\Users\kjun\source>cd D:\[00]Window\Desktop\sqlitec++\sqlite

C:\Users\kjun\source>d:

D:\[00]Window\Desktop\sqlitec++\sqlite>lib /def:sqlite3.def /machine:x64
Microsoft (R) Library Manager Version 14.12.25835.0
Copyright (C) Microsoft Corporation.  All rights reserved.

   sqlite3.lib 라이브러리 및 sqlite3.exp 개체를 생성하고 있습니다.

D:\[00]Window\Desktop\sqlitec++\sqlite>

lib 파일을 sqlite.h 있는 쪽에(특정폴더나 프로젝트 폴더) 복사/이동 합니다.

아래 위 작업이 완료된 파일을 첨부합니다.

sqlite.zip


Visual Studio 를 실행하고

C++ 프로젝트를 만들어 아래처럼 sqlite3.h 파일을 추가하고 sqlite3.dll, sqlite3.lib 을 추가합니다.

cpp 파일을 하나 추가해 아래 내용을 넣고 코딩을 시작하면 됩니다.

#pragma comment(lib,"sqlite3.lib")
#include <sqlite3.h>

아래는 sqlite db 에 테이블을 만들고 데이터를 insert 하는 코드입니다.

코드는 https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm 여기를 참고 했습니다.

#pragma comment(lib,"sqlite3.lib")
#include "sqlite3.h"
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <stdlib.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;
 const char *sql;

 /* Open database */
 rc = sqlite3_open("test.db", &db);

 if (rc) {
  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  return(0);
 }
 else {
  fprintf(stderr, "Opened database successfully\n");
 }

 /* Create SQL statement */
 sql = "CREATE TABLE COMPANY("  \
  "ID INT PRIMARY KEY     NOT NULL," \
  "NAME           TEXT    NOT NULL," \
  "AGE            INT     NOT NULL," \
  "ADDRESS        CHAR(50)," \
  "SALARY         REAL );";

 /* Execute SQL statement */
 rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

 // PRAGMA
 // synchronous = OFF journal_mode=OFF TEMP_store = memory cash_SIZE + !))) PAGE_SIZE + @)$* COUNT_changes=OFF case_SENSITIVE_LIKE+Ffalse
 sqlite3_exec(db, "synchronous = OFF", NULL, NULL, NULL);
 sqlite3_exec(db, "journal_mode = OFF", NULL, NULL, NULL);
 sqlite3_exec(db, "temp_store = memory", NULL, NULL, NULL);
 sqlite3_exec(db, "cash_size = 1000", NULL, NULL, NULL);
 sqlite3_exec(db, "count_changes = OFF", NULL, NULL, NULL);
 sqlite3_exec(db, "case_sensitive_like = false", NULL, NULL, NULL);

 clock_t t = clock();

 // 'db' is the pointer you got from sqlite3_open*
 sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
 
 for (int i = 0; i < 10; i++)
 {
  char query[700];
  const char *insertsql;

  insertsql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \
   "VALUES (%d, 'Paul', 32, 'California', 20000.00 ); ";

  sprintf_s(query, insertsql, i);

  /* Execute SQL statement */
  rc = sqlite3_exec(db, query, callback, 0, &zErrMsg);
 }
 
 // Any (modifying) SQL commands executed here are not committed until at the you call:
 rc = sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);

 t = clock() - t;

 printf("\n Time Esc :: %f ", ((float)t) / CLOCKS_PER_SEC);

 if (rc != SQLITE_OK) {
  fprintf(stderr, "SQL error: %s\n", zErrMsg);
  sqlite3_free(zErrMsg);
 }
 else {
  fprintf(stdout, "Records created successfully\n");
 }
 sqlite3_close(db);
 return 0;
}

 

전체 프로젝트도 소스는 아래 GitHub 에 있습니다.

https://github.com/kjundev/SQLiteTest

'C++' 카테고리의 다른 글

(C++) SQLite 사용하기 - Visual Studio 2017  (0) 2018.03.08
https://www.tutorialspoint.com/sqlite/index.htm

사용법과 설명등이 잘되어있다.

 

 

'DB' 카테고리의 다른 글

(SQLite) SQLite 공부하기 좋은 사이트  (0) 2018.03.07
SQLite Bulk Insert  (0) 2018.03.07
(SQLite) 속도향상 - 링크  (0) 2018.03.01
(Oracle) UNPIVOT  (1) 2018.02.20
(SQLite) insert 쿼리 수행 속도 높이기  (3) 2018.01.20
SQLite 참고 링크 모음  (1) 2017.11.23

1. transaction 으로 묶어서 처리한다.

2. cash_size 값 변경 (예:1000)

3. page_size 값 변경 (예:2048)

4. journal_mode=wal

5. temp_store=memory

6. synchronous=off

  1. Favicon of http://kjun.kr kjun.kr 2018.03.07 14:51 신고

    https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm

  2. Favicon of http://kjun.kr kjun.kr 2018.03.07 14:52 신고

    https://github.com/SRombauts/SQLiteCpp

  3. Favicon of http://kjun.kr kjun.kr 2018.03.07 14:53 신고

    http://igotit.tistory.com/entry/Visual-C-%EC%97%90%EC%84%9C-SQLite-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0

SQLite 다루는 참고 동영상 링크

https://www.youtube.com/watch?v=t3w8HIdBFiA

 

이번 시간에는 DataBase 관련 첫번째 시간으로 SQLite 를 알아보도록 하겠습니다.

보통 서버와 연결하지 않고 로컬로만 어떤 데이터를 다룰 때는 SQLite 가 가장 편한 것 같습니다.

이번에 소개할건 PlugIn.SQLite 입니다. (Nuget 에서 받을수 있습니다.)

 

프로젝트를 열고 솔루션의 NutGet 패키지 관리로 들어갑니다.

PlugIn.SQLite 로 검색하면 아래처럼 하나가 나옵니다.

오른쪽에 모두 체크하고 설치를 클릭합니다.

확인을 하게되면

각각 프로젝트 별로 (UWP 제외) SQLite 폴더가 생성되고 내부에 코딩이 자동으로 들어가 있게됩니다.

각각 프로젝트에 맞게 namespace 등은 변경해 주어야합니다.

[ Android ]

코드 내용 (프로젝트에 맞게 변경이 완료된 내용입니다.)

using System.IO;
using SQLite;
using Xamarin.Forms;
using XamarinFormsStudy.Android;

[assembly: Dependency(typeof(SQLite_Android))]

namespace XamarinFormsStudy.Android
{
    public class SQLite_Android : ISQLite
    {
        public SQLite_Android() { }
        public SQLiteConnection GetConnection()
        {
            var sqliteFilename = "MySQLiteDB.db3";
            string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
            var path = Path.Combine(documentsPath, sqliteFilename);
            // Create the connection
            var conn = new SQLiteConnection(path);
            // Return the database connection
            return conn;
        }
    }
}

[ iOS ]

코드내용 (프로젝트에 맞게 변경이 완료된 내용입니다.)

using System;
using System.IO;
using SQLite;
using Xamarin.Forms;
using XamarinFormsStudy.iOS;

[assembly: Dependency(typeof(SQLite_iOS))]

namespace XamarinFormsStudy.iOS
{
    public class SQLite_iOS : ISQLite
    {

        public SQLite_iOS()
        {
        }

        public SQLiteConnection GetConnection()
        {
            var sqliteFilename = "MySQLiteDB.db3";
            string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); // Documents folder
            string libraryPath = Path.Combine(documentsPath, "..", "Library"); // Library folder
            var path = Path.Combine(libraryPath, sqliteFilename);
            // Create the connection
            var conn = new SQLiteConnection(path);
            // Return the database connection
            return conn;
        }
    }
}

[ UWP ]

UWP 는 참조는 추가 되나 관련 파일이 자동으로 추가되지 않습니다.

수동으로 추가해 주어야합니다.

이식가능 프로젝트에 보면 'SQLite-AppSample' 폴더에 readme.txt 파일이 있는데 여기에 UWP 에 넣어야할 코딩이 나와있습니다.

UWP 프로젝트에서 클래스를 추가하고 위 코딩을 넣습니다.

당연히 프로젝트에 맞에 수정을 해야합니다.

코드 내용 (프로젝트에 맞게 변경이 완료된 내용입니다.)

using System.IO;
using Windows.Storage;
using SQLite;
using Xamarin.Forms;
using XamarinFormsStudy.UWP;

[assembly: Dependency(typeof(SQLite_Uwp))]

namespace XamarinFormsStudy.UWP
{
    public class SQLite_Uwp : ISQLite
    {
        public SQLite_Uwp()
        {
        }

        public SQLiteConnection GetConnection()
        {
            var sqliteFilename = "MySQLiteDB.db3";
            string documentsPath = ApplicationData.Current.LocalFolder.Path;
            var path = Path.Combine(documentsPath, sqliteFilename);
            // Create the connection
            var conn = new SQLiteConnection(path);
            // Return the database connection
            return conn;
        }
    }
}

 

[ 이식가능 프로젝트(PCL) ]

이식가능에 추가된 SQLite 관련된 파일중 TodoItem 은 테스트할 데이터에 대한 테이블의 형태가 정의되어있습니다.

using SQLite;

namespace XamarinFormsStudy
{
    public class TodoItem
    {

        // 키 정보이며 하나씩 증가합니다.
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }

        public string Text { get; set; }

        public bool Done { get; set; }

        public override string ToString()
        {
            return string.Format("Done : {0}, Text : {1}", Done, Text);
        }
    }
}

그리고 SQLiteSamplePage 에서는 CRUD 관련 코딩 예시가 나와있습니다.

또한 ContentPage 도 제공해 주어 바로 실행하여 확인도 가능합니다.

App.xaml 파일에서 아래 처럼 호출되도록 하고 실행해 보면

MainPage = new SQLiteSamplePage().GetSampleContentPage();

아래 와 같은 결과가 나옵니다.

데이터는 입력항목과 스위치 버튼의 true,false 값이 Add 하면 저장되고 Refresh 하게되면 저장된 값이 아래로 나열됩니다.

 

 

참고

https://www.youtube.com/watch?v=nrXmA-0NoOE&index=26&list=PLpbcUe4chE7-5t2mlamz6yB0qzAfO5Yln

GitHub > https://github.com/knagjun/XamarinForms

 

 

http://lovedb.tistory.com/347

http://gongdoo.tistory.com/124

 

'DB' 카테고리의 다른 글

ORACLE vs DB2  (0) 2017.05.30
(SQLite) SQLite with GPU  (0) 2017.04.30
(SQLITE) 참고 (링크)  (0) 2017.04.17
(SQLITE) Visual Studio  (0) 2017.04.17
(SQLITE) Tool  (0) 2017.04.17
(SQLITE) Setup  (0) 2017.04.17

1. 제품다운로드
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
sqlite-netFx46-setup-bundle-x64-2015-1.0.99.0.exe
설치

2. Entity Framework 이용하기 위해선 32 비트 용도 설치해야 (디자이너)
sqlite-netFx46-setup-bundle-x86-2015-1.0.99.0.exe 설치


설치
과정 아래처럼 선택하는 화면이 나옴

 

3. 프로젝트에  NuGet 패키지 관리자를 통해 System.Data.SQLite 설치

 

4. Entity DataModel 생성

 - 서버탐색기를 이용해 미리 sqlite 연결을 합니다.

 - 항목을 추가하여 ADO.NET 엔티티 데이터 모델을 선택합니다.

 - 서버탐색기에서 추가했던 연결 내용이 보입니다.

 - 테이블을 추가하고

 - 메세지는 확인!!

 - 디자이너에 추가한 테이블이 보이면 완료!!

 

 - 아래와 같은 창이 뜨면 설치가 잘못된 것이므로 재설치 해야 합니다.

5. 코딩 하기

* Entity Data Insert          

SQLITEmyDBEntities context = new SQLITEmyDBEntities();

int maxid = context.kjunTest.OrderByDescending(c => c.id).Select(c => c.id).FirstOrDefault();

kjunTest testData = new kjunTest();

testData.id = maxid + 1;

testData.name = "Test" + (maxid + 1);

context.kjunTest.Add(testData);

context.SaveChanges();

 

* SQLiteConnection 을 이용해 Data 가져오기

string strConn = @"Data Source=E:\SQLITEmyDB";

using (SQLiteConnection conn = new SQLiteConnection(strConn))

 {

  DataSet ds = new DataSet();

  conn.Open();

  string sql = "SELECT * FROM kjunTest";

  var adpt = new SQLiteDataAdapter(sql, conn);

  adpt.Fill(ds);

  return ds;

 }

 

 

 

'DB' 카테고리의 다른 글

(SQLite) SQLite with GPU  (0) 2017.04.30
(SQLITE) 참고 (링크)  (0) 2017.04.17
(SQLITE) Visual Studio  (0) 2017.04.17
(SQLITE) Tool  (0) 2017.04.17
(SQLITE) Setup  (0) 2017.04.17
(Maria) Visual Studio 에서 사용하기  (0) 2017.04.15

DB Browser for SQLite 3.8.0

https://github.com/sqlitebrowser/sqlitebrowser/releases/tag/v3.8.0

위에서 다운로드하여 설치 한다.

설치 시 특별히 설정할것없이 다음다음다음...

아래는 실행화면

 

 

 

'DB' 카테고리의 다른 글

(SQLITE) 참고 (링크)  (0) 2017.04.17
(SQLITE) Visual Studio  (0) 2017.04.17
(SQLITE) Tool  (0) 2017.04.17
(SQLITE) Setup  (0) 2017.04.17
(Maria) Visual Studio 에서 사용하기  (0) 2017.04.15
(Maria) Tool 설치 (HeidiSQL)  (0) 2017.04.15

http://www.sqlite.org/ 여기서 설치 파일 다운 32비트와 64 비트 설치 순서

SQLITE 32 bit

위 항목이 중요하다 32 비트를 설치해야 entity freamwork 를 이용해 sqlite 를 사용할수 있다.

 

 

SQLITE 64 bit

 

'DB' 카테고리의 다른 글

(SQLITE) Visual Studio  (0) 2017.04.17
(SQLITE) Tool  (0) 2017.04.17
(SQLITE) Setup  (0) 2017.04.17
(Maria) Visual Studio 에서 사용하기  (0) 2017.04.15
(Maria) Tool 설치 (HeidiSQL)  (0) 2017.04.15
(Maria) Setup  (0) 2017.04.15

+ Recent posts

티스토리 툴바