fastdo  0.5.12
eiendb_base.hpp
浏览该文件的文档.
1 #ifndef __EIENDB_BASE_HPP__
2 #define __EIENDB_BASE_HPP__
3 
4 #include "winux.hpp"
5 
7 namespace eiendb
8 {
9 
10 #ifdef EIENDB_DLL_USE
11  #if defined(_MSC_VER) || defined(WIN32)
12  #pragma warning( disable: 4251 )
13  #ifdef EIENDB_DLL_EXPORTS
14  #define EIENDB_DLL __declspec(dllexport)
15  #else
16  #define EIENDB_DLL __declspec(dllimport)
17  #endif
18 
19  #define EIENDB_API __stdcall
20  #else
21  #define EIENDB_DLL
22  #define EIENDB_API
23  #endif
24 #else
25  #define EIENDB_DLL
26  #define EIENDB_API
27 #endif
28 
29 #define EIENDB_FUNC_DECL(ret) EIENDB_DLL ret EIENDB_API
30 #define EIENDB_FUNC_IMPL(ret) ret EIENDB_API
31 
32 
33 #ifndef interface
34 #define interface struct
35 #endif
36 
38 typedef void * DBHandle;
39 
42 {
43 public:
44  enum
45  {
50  };
51 
52  DbError( int errType, winux::AnsiString const & s ) throw() : winux::Error( errType, s ) { }
53 };
54 
55 interface IDBConnection;
56 interface IDBStatement;
57 interface IDBResult;
58 
62 {
63  virtual ~IDBConnection() { }
64 
66  virtual bool connect();
67 
69  virtual bool close();
70 
72  virtual void alive() = 0;
73 
77  virtual bool selectDb( winux::String const & database );
78 
83  virtual bool setLinkCharset( winux::String const & charset );
84 
88  virtual winux::ulong affectedRows();
89 
93  virtual bool createDb( winux::String const & database );
94 
98  virtual bool dropDb( winux::String const & database );
99 
104  virtual int errNo();
105 
108  virtual winux::String error();
109 
113  virtual winux::SharedPointer<IDBResult> query( winux::String const & sql );
115 
121  virtual bool exec( winux::String const & sql );
122  virtual bool exec( winux::SharedPointer<IDBStatement> stmt );
123 
128  virtual winux::ulong insertId();
129 
135  virtual winux::String escape( winux::String const & str, winux::String const & addQuote = "\'" );
136  virtual winux::String escape( winux::byte const * buf, int size, winux::String const & addQuote = "\'" );
137 
141  virtual winux::SharedPointer<IDBResult> listDbs();
142 
147  virtual winux::SharedPointer<IDBResult> listFields( winux::String const & tableName );
148 
152  virtual winux::SharedPointer<IDBResult> listTables();
153 
155  virtual winux::String tableDdl( winux::String const & tableName );
156 
160  virtual winux::String symbolQuotes( winux::String const & str );
161 
162  virtual int loadSql( winux::String const & sqlText, winux::StringArray * arrSql ) = 0;
163  virtual int loadSqlFile( winux::IFile * sqlScriptFile, winux::StringArray * arrSql ) = 0;
164  virtual int getPrimaryKey( winux::String const & tableName, winux::StringArray * arrKeyColumn ) = 0;
165 
167  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql );
169  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::Mixed const & params ) = 0;
171  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::MixedArray const & params );
173  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::StringMixedMap const & params );
174 
176  virtual operator bool() const = 0;
177 };
178 
181 {
182  virtual ~IDBStatement() { }
184  virtual bool build( winux::String const & sql );
186  virtual bool build( winux::String const & sql, winux::Mixed const & params ) = 0;
188  virtual bool build( winux::String const & sql, winux::MixedArray const & params );
190  virtual bool build( winux::String const & sql, winux::StringMixedMap const & params );
192  virtual bool bind( int paramIndex, winux::Mixed const & val );
194  virtual bool bind( winux::String const & paramName, winux::Mixed const & val );
195 };
196 
199 {
200  virtual ~IDBResult() { }
201 
205  virtual bool dataSeek( int index );
206 
209  virtual bool fetchRow( winux::Mixed * fields, int type = 0 ) = 0;
210 
212  virtual bool fetchRow( winux::MixedArray * fields );
213 
215  virtual bool fetchRow( winux::StringMixedMap * fields );
216 
220  virtual winux::String fieldName( int fieldIndex );
221 
224  virtual bool free();
225 
228  virtual winux::ulong fieldsCount();
229 
232  virtual winux::ulong rowsCount();
233 
237  virtual winux::String fieldType( int fieldIndex );
238 
239  /* \brief 获取一个结果集中指定字段相关的标记
240  \param fieldIndex int 字段索引
241  \return string
242  virtual winux::String fieldFlags( int fieldIndex )
243  {
244  throw DBException("fieldFlags() not implemented");
245  }*/
246 
247  /* \brief 返回结果集中指定字段的长度
248  * \param fieldIndex int 字段索引
249  * \return int
250  virtual int fieldLen( int fieldIndex )
251  {
252  throw DBException("fieldLen() not implemented");
253  }*/
254 
255  /* \brief 获取指定字段所在表的名称
256  * \param fieldIndex int 字段索引
257  * \return string
258  virtual winux::String fieldTable( int fieldIndex )
259  {
260  throw DBException("fieldTable() not implemented");
261  }*/
262 
263  /* \brief 从结果集里获取一个单元格的内容
264  \param row int 记录索引
265  \param field int 字段索引
266  \return string
267  virtual winux::String result( int row, int field )
268  {
269  throw DBException("result() not implemented");
270  }*/
271 
272 };
273 
276 {
277  virtual ~IDBModifier() { }
278 
283  virtual bool addNew( winux::StringArray const & fieldNames, winux::MixedArray const & values );
284 
288  virtual bool addNew( winux::Mixed const & fields ) = 0;
289 
295  virtual bool modify( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::Mixed const & prkValue );
296 
301  virtual bool modify( winux::Mixed const & fields, winux::Mixed const & prkValue ) = 0;
302 
308  virtual bool modifyEx( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::String const & where );
309 
314  virtual bool modifyEx( winux::Mixed const & fields, winux::String const & where ) = 0;
315 
319  virtual bool deleteOne( winux::Mixed const & prkValue );
320 
324  virtual bool deleteEx( winux::String const & where );
325 };
326 
328 EIENDB_FUNC_DECL(winux::String) MixedToEscapedStr( winux::Mixed const & m, IDBConnection * cnn, winux::String const & addQuote = "\'" );
329 
332 {
333 public:
334  DBModifier( IDBConnection * cnn, winux::String const & tableName );
335  virtual ~DBModifier();
336 
337  virtual bool addNew( winux::StringArray const & fieldNames, winux::MixedArray const & values );
338  virtual bool addNew( winux::Mixed const & fields );
339  virtual bool modify( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::Mixed const & prkValue );
340  virtual bool modify( winux::Mixed const & fields, winux::Mixed const & prkValue );
341  virtual bool modifyEx( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::String const & where );
342  virtual bool modifyEx( winux::Mixed const & fields, winux::String const & where );
343  virtual bool deleteOne( winux::Mixed const & prkValue );
344  virtual bool deleteEx( winux::String const & where );
345 
346 protected:
347  virtual void _getTableInfo() = 0;
351  winux::StringArray _fieldNames; // 原始字段名
352  //bool _prkAutoIncrement; // 自动增长
353 
355 };
356 
357 
358 }
359 
360 #endif // __EIENDB_BASE_HPP__
void * DBHandle
数据库各种对象资源的指针类型
Definition: eiendb_base.hpp:38
winux::String _tableName
winux::StringArray _prkColumn
数据结果操作接口
数据库连接接口
Definition: eiendb_base.hpp:61
std::map< String, Mixed > StringMixedMap
Definition: utilities.hpp:176
std::basic_string< char > AnsiString
Definition: utilities.hpp:165
IDBConnection * _cnn
#define EIENDB_FUNC_DECL(ret)
Definition: eiendb_base.hpp:29
winux::String MixedToEscapedStr(winux::Mixed const &m, IDBConnection *cnn, winux::String const &addQuote="\'")
Mixed变量连接进SQL语句时的换码操作
eiendb数据库错误
Definition: eiendb_base.hpp:41
#define DISABLE_OBJECT_COPY(clsname)
Definition: utilities.hpp:78
DbError(int errType, winux::AnsiString const &s)
Definition: eiendb_base.hpp:52
std::vector< String > StringArray
Definition: utilities.hpp:171
修改器接口
virtual ~IDBResult()
std::vector< Mixed > MixedArray
Definition: utilities.hpp:175
#define EIENDB_DLL
Definition: eiendb_base.hpp:25
数据库修改器部分通用实现
SQL语句接口,构造SQL语句,参数绑定
winux::StringArray _fieldNames
unsigned char byte
Definition: utilities.hpp:159
混合体,能表示多种类型的值
Definition: utilities.hpp:586
错误类
Definition: utilities.hpp:413
数据库通用接口
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