fastdo  0.5.12
eiendb_sqlite.hpp
浏览该文件的文档.
1 #ifndef __EIENDB_SQLITE_HPP__
2 #define __EIENDB_SQLITE_HPP__
3 
4 #include "eiendb_base.hpp"
5 
6 struct sqlite3;
7 struct sqlite3_stmt;
8 
9 namespace eiendb
10 {
11 
14 {
15  int _sqliteErrNo;
16 public:
17  SQLiteDbError( int sqliteErrNo, winux::AnsiString const & s ) throw() : DbError( DbError::dbeDbSelfError, s ), _sqliteErrNo(sqliteErrNo) { }
18  int getSqLiteErrCode() const throw() { return _sqliteErrNo; }
19 };
20 
22 {
23 public:
24  SQLiteConnection( winux::String const & path = "", winux::AnsiString const & dbKey = "", winux::String linkCharset = "", bool doConnect = true );
25  virtual ~SQLiteConnection();
26 
27  virtual bool connect();
28  virtual bool close();
29  virtual void alive();
30  virtual bool setLinkCharset( winux::String const & charset );
31  virtual bool selectDb( winux::String const & database );
32  virtual bool createDb( winux::String const & database );
33  virtual bool dropDb( winux::String const & database );
34  virtual winux::ulong affectedRows();
35  virtual int errNo();
36  virtual winux::String error();
37  // 只是简单的做escape(),内部不会进行utf8换码,引号double
38  virtual winux::String escape( winux::String const & str, winux::String const & addQuote = "\'" );
39  // 将二进制数据转换成X'******'的形式
40  virtual winux::String escape( winux::byte const * buf, int size, winux::String const & addQuote = "\'" );
41  // 执行SQL语句查询并返回结果集
42  virtual winux::SharedPointer<IDBResult> query( winux::String const & sql );
44  // 执行SQL语句,返回bool代表是否成功
45  virtual bool exec( winux::String const & sql );
46  virtual bool exec( winux::SharedPointer<IDBStatement> stmt );
47  virtual winux::ulong insertId();
48  virtual winux::SharedPointer<IDBResult> listDbs();
49  // 执行 PRAGMA table_info(tablename)
50  virtual winux::SharedPointer<IDBResult> listFields( winux::String const & tableName );
51  // 执行 SELECT name FROM sqlite_master WHERE type = 'table' AND substr( name, 1, 7 ) <> 'sqlite_' ORDER BY name;
52  virtual winux::SharedPointer<IDBResult> listTables();
53  virtual winux::String tableDdl( winux::String const & tableName );
54  virtual winux::String symbolQuotes( winux::String const & str );
55 
56  virtual int loadSql( winux::String const & sqlText, winux::StringArray * arrSql );
57  virtual int loadSqlFile( winux::IFile * sqlScriptFile, winux::StringArray * arrSql );
58  virtual int getPrimaryKey( winux::String const & tableName, winux::StringArray * arrKeyColumn );
59 
60  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql );
61  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::Mixed const & params );
62  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::MixedArray const & params );
63  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::StringMixedMap const & params );
64 
65  virtual operator bool() const { return _db != NULL; }
66  operator sqlite3 * () const { return _db; }
67  // SQLite字符串转到winux::String,NULL也能正确处理
68  winux::String sqliteStrToString( char const * s );
69  // winux::String转到SQLite字符串
70  winux::AnsiString stringToSqliteStr( winux::String const & s );
71 private:
72  bool _open( winux::String const & database, winux::uint flags );
73 
74  sqlite3 * _db;
75  winux::String _path; // 输入的路径参数
76  winux::String _dirPath; // 解析到的目录路径
77  winux::String _database; // 解析到的数据库名
78  winux::String _linkCharset; // 连接校验字符集
79  winux::AnsiString _dbKey; // 数据库密码,可以为二进制数据
80 
82 };
83 
85 {
86 public:
88  SQLiteStatement( SQLiteConnection * cnn, winux::String const & sql );
89  SQLiteStatement( SQLiteConnection * cnn, winux::String const & sql, winux::Mixed const & params );
90  SQLiteStatement( SQLiteConnection * cnn, winux::String const & sql, winux::MixedArray const & params );
91  SQLiteStatement( SQLiteConnection * cnn, winux::String const & sql, winux::StringMixedMap const & params );
92  virtual ~SQLiteStatement();
93  //SQLiteStatement( SQLiteStatement & other );
94  //SQLiteStatement & operator = ( SQLiteStatement & other );
95 
96  virtual bool build( winux::String const & sql );
97  virtual bool build( winux::String const & sql, winux::Mixed const & params );
98  virtual bool build( winux::String const & sql, winux::MixedArray const & params );
99  virtual bool build( winux::String const & sql, winux::StringMixedMap const & params );
100  virtual bool bind( int paramIndex, winux::Mixed const & val );
101  virtual bool bind( winux::String const & paramName, winux::Mixed const & val );
102 
103  operator sqlite3_stmt * () const { return _stmt; }
104  SQLiteConnection * getCnn() const { return _cnn; }
105  winux::String getSql() const { return _sql; }
106 
107 private:
108  void free();
109 
110  SQLiteConnection * _cnn;
111  sqlite3_stmt * _stmt;
112  winux::String _sql;
113  std::vector< std::pair< int, winux::Mixed > > _bindingParams; // 已绑定的参数
114  friend class SQLiteResult;
115 
117 };
118 
120 {
121 public:
123  virtual ~SQLiteResult();
124 
125  virtual bool fetchRow( winux::Mixed * fields, int type = 0 );
126  virtual bool fetchRow( winux::MixedArray * fields );
127  virtual bool fetchRow( winux::StringMixedMap * fields );
128  virtual winux::String fieldName( int fieldIndex );
129  virtual winux::ulong fieldsCount();
130  virtual winux::ulong rowsCount();
131  virtual bool free();
132  virtual winux::String fieldType( int fieldIndex );
133 
134  // 重置结果集,以便再次fetch
135  bool reset();
136  int retCode() const { return _retCode; }
137 private:
139  int _retCode;
140  bool _first;
141  bool _hasRow;
142  winux::StringArray _fieldNames; // 非原始字段名
143 
145 };
146 
148 {
149 public:
150  SQLiteModifier( SQLiteConnection * cnn, winux::String const & tableName );
151  virtual ~SQLiteModifier();
152 
153 /* virtual bool addNew( winux::StringArray const & fieldNames, winux::MixedArray const & values );
154  virtual bool addNew( winux::Mixed const & fields );
155  virtual bool modify( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::Mixed const & prkValue );
156  virtual bool modify( winux::Mixed const & fields, winux::Mixed const & prkValue );
157  virtual int modifyEx( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::String const & where );
158  virtual int modifyEx( winux::Mixed const & fields, winux::String const & where );
159  virtual bool deleteOne( winux::Mixed const & prkValue );
160  virtual int deleteEx( winux::String const & where ); */
161 
162 protected:
163  virtual void _getTableInfo();
164 /* SQLiteConnection * _cnn;
165  winux::String _tableName;
166  winux::StringArray _fieldNames; // 原始字段名
167  winux::String _prkName; // 主键名
168  //bool _prkAutoIncrement; // 自动增长 */
169 
171 };
172 
173 }
174 
175 #endif // __EIENDB_SQLITE_HPP__
数据结果操作接口
数据库连接接口
Definition: eiendb_base.hpp:61
std::map< String, Mixed > StringMixedMap
Definition: utilities.hpp:176
std::basic_string< char > AnsiString
Definition: utilities.hpp:165
eiendb数据库错误
Definition: eiendb_base.hpp:41
#define DISABLE_OBJECT_COPY(clsname)
Definition: utilities.hpp:78
std::vector< String > StringArray
Definition: utilities.hpp:171
std::vector< Mixed > MixedArray
Definition: utilities.hpp:175
#define EIENDB_DLL
Definition: eiendb_base.hpp:25
数据库修改器部分通用实现
SQL语句接口,构造SQL语句,参数绑定
unsigned int uint
Definition: utilities.hpp:128
SQLiteDbError(int sqliteErrNo, winux::AnsiString const &s)
int getSqLiteErrCode() const
SQLiteConnection * getCnn() const
unsigned char byte
Definition: utilities.hpp:159
winux::String getSql() const
混合体,能表示多种类型的值
Definition: utilities.hpp:586
数据库通用接口
Definition: eiendb_base.hpp:7
数据库错误
文件接口
Definition: filesys.hpp:194
unsigned long ulong
Definition: utilities.hpp:129
数据库自身的错误
Definition: eiendb_base.hpp:47
std::basic_string< tchar > String
Definition: utilities.hpp:162