Visual Studio 2015 の C++ で SQLite3 を利用する方法

この記事は公開されてから時間が経っています

Visual Studio 2015 で用意したプロジェクトで SQLite3 を使う方法の備忘録

いろいろなサイトで解説されていますが、2015 で C++ のプロジェクトを使った説明をあまり見かけることが無い様子なので、残して於こう!と言う試み

準備

SQLite.org のサイトの Download から、
Source Code の sqlite-amalgamation-XXXXXXX.zip
Precompiled Binaries for Windows の sqlite-dll-win32-x86-XXXXXXX.zip
をダウンロードしてきます
起草時のバージョンは 3140200 でした

sqlite-amalgamation-XXXXXXX.zip はヘッダーファイルが含まれています
sqlite-dll-win32-x86-XXXXXXX.zip  は、.def と .dll が含まれています

sqlite3.h,sqlite3.c,sqlite3ex.h と、(ヘッダーだけでも大丈夫かな?)
sqlite3.def,sqlite3.dll を、プロジェクトファイル (.vcxproj) のあるディレクトリーにコピーします

今回は、32bit の DLL を利用しました

.lib の作成

C:\Users\user\Documents\Visual Studio 2015\Projects\xxxxxx_test1\xxxxxx_test1>"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\lib.exe" /DEF:sqlite3.def /MACHINE:x86 /OUT:sqlite3.lib
Microsoft (R) Library Manager Version 14.00.24215.1
Copyright (C) Microsoft Corporation.  All rights reserved.

   ライブラリ sqlite3.lib とオブジェクト sqlite3.exp を作成中

C:\Users\user\Documents\Visual Studio 2015\Projects\xxxxxx_test1\xxxxxx_test1>

sqlite3.lib が出来ますので、ソリューションエクスプローラーから、プロジェクトに追加します
外部依存関係 に追加しても、ヘッダーファイル に追加されます
.

ソースのサンプル

フォーム付きのプロジェクトですので、余計なコードも付いてますが悪しからず..
あと、文字コードのキャストも今ひとつ…

#include "Form1.h"

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include "sqlite3.h"

using namespace xxxxxx_test1;
using namespace std;
using namespace System;
using namespace System::Windows::Forms;

[STAThreadAttribute]
int main() {

    int status = SQLITE_OK;
    ::sqlite3* dbh = NULL;
    String ^errmsg;
    char* errorMessage;

    const char* tblCreate = "CREATE TABLE test ( id INTEGER PRIMARY KEY);";
    status = ::sqlite3_open("test.sqlite3", &dbh);
    if (status != SQLITE_OK) {
        errmsg = gcnew String(sqlite3_errmsg(dbh));
        MessageBox::Show(errmsg,"SQLite Error",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
    }
    status = ::sqlite3_exec(dbh, tblCreate, NULL, NULL, &errorMessage);
    if (status != SQLITE_OK) {
        errmsg = gcnew String(errorMessage);
        MessageBox::Show(errmsg,"SQLite Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
    }

    xxxxxx_test1::Form1 ^form = gcnew xxxxxx_test1::Form1();
    form->ShowDialog();

    ::sqlite3_close(dbh);

    return 0;
}

サンプルなので、簡単に書いてます
一応、出来てるようです

%e7%84%a1%e9%a1%8c2

見て判るとおり、二度目の実行時には、テーブル test が既に有りますのでエラーします
キチンと MessageBox にエラーが表示されますので、エラーの処理もこんな感じから拡張していけば良いのかな…

bind とか prepare を追記予定

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。