| 1 |
/********************************************************************** |
| 2 |
kz_odbc.h ODBC APIの簡易ラッパークラス |
| 3 |
Authors Katsuhisa Ohfuji |
| 4 |
Version 0.1a(開発版)2008/03/11 |
| 5 |
Version 0.2a(開発版)2008/04/14 NULL値の取得エラーの修正 |
| 6 |
(NULL値を空文字として取得する) |
| 7 |
Version 0.3a(開発版)2008/05/16 カタログ関数(tables,columns)の追加 |
| 8 |
Version 0.4a(開発版)2009/01/06 Linux対応(+一部関数の追加) |
| 9 |
Version 0.5a(開発版)2009/02/12 colinfoの添え字調整 |
| 10 |
Version 0.6a(開発版)2009/02/27 トランザクション対応 |
| 11 |
Fetch関数(next)の追加 |
| 12 |
Version 0.7a(開発版)2009/04/10 データ取得のバグ修正 |
| 13 |
Version 0.7b(開発版)2009/05/07 引数のデータ型の訂正 |
| 14 |
Version 0.8a(開発版)2009/05/12 NULLデーター挿入の対応 |
| 15 |
Version 0.8b(開発版)2009/12/11 64bit修正 |
| 16 |
Version 0.9 2011/04/14 バグフィックス |
| 17 |
|
| 18 |
使い方(Ver0.6から使い方が変わりました) |
| 19 |
1.kz_odbcオブジェクトを作成(コンストラクタにODBC接続文字列を指定) |
| 20 |
|
| 21 |
kz_odbc db("DSN=myaccess", false); |
| 22 |
|
| 23 |
※DSNでデーターソースの指定のほか、Driverでの指定も可 |
| 24 |
※コンストラクタの2つ目の引数はコミットモードを指定する |
| 25 |
trueで手動コミットモード、falseで自動コミットモード |
| 26 |
手動コミットモードにした場合、最後にCommit()を呼び出す必要がある。 |
| 27 |
|
| 28 |
2.SQLの発行 |
| 29 |
stmtオブジェクトを作成し、SQLを発行する。 |
| 30 |
|
| 31 |
kz_stmt stmt(&db); |
| 32 |
|
| 33 |
stmt, "INSERT INTO TEST(col1, col2) VALUE(?, ?)", "val1", 10, endsql; |
| 34 |
|
| 35 |
※各要素をカンマ(,)で区切る |
| 36 |
※最初にkz_stmtオブジェクトを指定し、次にSQLを文字列で指定する。 |
| 37 |
※パラメーター(?に対する値)を続けて指定 |
| 38 |
※パラメーターで指定できる型は、整数(各int)、文字(char*)、 |
| 39 |
浮動小数点(double,float)、時間(struct tm) |
| 40 |
それ以外の型を指定するとSQLが発行されない(式全体が無視される)。 |
| 41 |
※整数の0をパラメータに指定する時は一度変数に入れてから指定する。 |
| 42 |
(C++コンパイラでは、整数の0は、NULLポインタと解釈されるので) |
| 43 |
※NULL値を指定したいときは、kz_odbc_nullを指定する。 |
| 44 |
stmt, "INSERT INTO TEST(col1) VALUE(?)", kz_odbc_null, endsql; |
| 45 |
※最後にendsqlと記述する(記述がないとSQLが発行されない)。 |
| 46 |
|
| 47 |
3.値を返すSQLの発行 |
| 48 |
|
| 49 |
kz_resultset_array result = (stmt, "SELECT * FROM TEST", endsqlrs); |
| 50 |
|
| 51 |
※ 結果セットは、kz_resultset_array(後述)で返る |
| 52 |
※ SQL発行部のカンマ式の全体を()で括る。 |
| 53 |
演算子の優先順位の関係で全体を括らないと値が返らない。 |
| 54 |
※ 最後は、endsqlrsと記述する(endsqlでは値が返らない)。 |
| 55 |
|
| 56 |
4.結果セットの参照方法 |
| 57 |
結果セット(kz_resultset_array)は、以下のtypdefになっている。 |
| 58 |
std::vector< std::map< std::string, std::string> > |
| 59 |
※SELECTの結果を全て受け取る |
| 60 |
※行はvectorに列はmap(列名と値のmap)になっている。 |
| 61 |
cout << result[1]["ID"] |
| 62 |
のようにアクセスできる。 |
| 63 |
※結果セットは、文字列に変換されて返る |
| 64 |
5.エラーの確認 |
| 65 |
※iserrメンバ関数でエラーの有無が分かる |
| 66 |
※errorsメンバ関数でエラー情報が取得できる |
| 67 |
結果は、kz_string_array( std::vector< std::string > )で返る。 |
| 68 |
サンプル |
| 69 |
kz_odbc_sample.cppをご参照下さい。 |
| 70 |
ライセンス |
| 71 |
本ソフトウェアはGPLで配布しています。 |
| 72 |
文字コード |
| 73 |
本ファイルはUTF-8でエンコードしています。 |
| 74 |
kz_odbc.hはShift_JIS(CP932)でエンコードしています。 |
| 75 |
お使いの環境に合わせて文字コードを変更後、ご使用願います。 |
| 76 |
動作環境 |
| 77 |
以下の環境で動作確認をしています。 |
| 78 |
Windows 7(64bit) 32bitモード・64bitモード access |
| 79 |
Windows 7(64bit) 32bitモード・64bitモード SQL Server 2008 |
| 80 |
Windows 7(64bit) 32bitモード・64bitモード MySQL(connector 5.18) |
| 81 |
Centos 5.5(32bit) unixODBC 2.2.11 MySQL connector 3.51 |
| 82 |
コンパイル方法 |
| 83 |
Windows:サンプルをご参照ください。 |
| 84 |
Linux: unixODBCが必要です。ランタイムと開発版両方必要です。 |
| 85 |
例)centos5.5 RPM:unixODBC-2.2.11およびunixODBC-devel-2.2.11 |
| 86 |
コンパイル時に g++コマンドに対して -lodbc オプションを指定下さい。 |
| 87 |
**********************************************************************/ |