fastdo  0.5.12
eiendb_mysql.hpp
浏览该文件的文档.
1 #ifndef __EIENDB_MYSQL_HPP__
2 #define __EIENDB_MYSQL_HPP__
3 
4 #include "eiendb_base.hpp"
5 
6 struct st_mysql;
7 struct st_mysql_res;
8 struct st_mysql_stmt;
9 
10 namespace eiendb
11 {
14 {
15  int _mysqlErrNo;
16 public:
17  MySQLDbError( int mysqlErrNo, winux::AnsiString const & s ) : DbError( DbError::dbeDbSelfError, s ), _mysqlErrNo(mysqlErrNo) { }
18  int getMySqlErrCode() const throw() { return _mysqlErrNo; }
19 };
20 
22 {
23 public:
24  MySQLConnection( winux::String const & host, winux::String const & user, winux::String const & pwd, winux::String const & dbName, winux::String const & linkCharset, bool doConnect = true );
25  virtual ~MySQLConnection();
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 winux::ulong insertId();
36  virtual int errNo();
37  virtual winux::String error();
38  virtual winux::String escape( winux::String const & str, winux::String const & addQuote = "\'" );
39  virtual winux::String escape( winux::byte const * buf, int size, winux::String const & addQuote = "\'" );
40  virtual bool exec( winux::String const & sql );
41  virtual bool exec( winux::SharedPointer<IDBStatement> stmt );
42  virtual winux::SharedPointer<IDBResult> query( winux::String const & sql );
44  virtual winux::SharedPointer<IDBResult> listDbs();
45  virtual winux::SharedPointer<IDBResult> listFields( winux::String const & tableName );
46  virtual winux::SharedPointer<IDBResult> listTables();
47  virtual winux::String tableDdl( winux::String const & tableName );
48  virtual winux::String symbolQuotes( winux::String const & str );
49 
50  virtual int loadSql( winux::String const & sqlText, winux::StringArray * arrSql );
51  virtual int loadSqlFile( winux::IFile * sqlScriptFile, winux::StringArray * arrSql );
52  virtual int getPrimaryKey( winux::String const & tableName, winux::StringArray * arrKeyColumn );
53 
54  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql );
55  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::Mixed const & params );
56  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::MixedArray const & params );
57  virtual winux::SharedPointer<IDBStatement> buildStmt( winux::String const & sql, winux::StringMixedMap const & params );
58 
59  virtual operator bool() const { return _mysql != NULL; }
60  operator struct st_mysql * () const { return _mysql; }
61 private:
62  struct st_mysql * _mysql; // 代表MYSQL连接
63  winux::String _hostAddr; // 主机地址
64  int _port; // 端口
65  winux::String _user; // 用户名
66  winux::String _pwd; // 密码
67  winux::String _dbName; // 数据库名
68  winux::String _linkCharset; // 连接校验字符集
69 
71 };
72 
74 {
75 public:
77  MySQLStatement( MySQLConnection * cnn, winux::String const & sql );
78  MySQLStatement( MySQLConnection * cnn, winux::String const & sql, winux::Mixed const & params );
79  MySQLStatement( MySQLConnection * cnn, winux::String const & sql, winux::MixedArray const & params );
80  MySQLStatement( MySQLConnection * cnn, winux::String const & sql, winux::StringMixedMap const & params );
81  virtual ~MySQLStatement();
83  virtual bool build( winux::String const & sql );
84  virtual bool build( winux::String const & sql, winux::Mixed const & params );
85  virtual bool build( winux::String const & sql, winux::MixedArray const & params );
86  virtual bool build( winux::String const & sql, winux::StringMixedMap const & params );
88  virtual bool bind( int paramIndex, winux::Mixed const & val );
90  virtual bool bind( winux::String const & paramName, winux::Mixed const & val );
91 
92  operator bool() const { return !_orgSql.empty(); }
93  MySQLConnection * getCnn() const { return _cnn; }
94  winux::String const & getSql();
95 
96  // paramIndex base on 1
97  winux::Mixed const & getParam( int paramIndex ) const;
98  // paramName prefix with ':'
99  winux::Mixed const & getParam( winux::String const & paramName ) const;
100 private:
101  void _generateSql();
102 
103  MySQLConnection * _cnn;
104  winux::String _orgSql; // 原SQL
105  winux::String _sql;
106  bool _isGeneratedSql; // 是否已经产生SQL
107  bool _isNameBinding; // 是否采用参数名称绑定
108  std::vector< std::pair< int, winux::Mixed > > _bindingParams; // 已绑定的参数
109  std::vector< std::pair< winux::String, winux::Mixed > > _bindingNameParams; // 已绑定的名称参数
110 
112 };
113 
115 {
116 public:
118  virtual ~MySQLResult();
119  virtual bool free();
120 
121  virtual bool dataSeek( int index );
122  virtual bool fetchRow( winux::Mixed * fields, int type = 0 );
123  virtual bool fetchRow( winux::MixedArray * fields );
124  virtual bool fetchRow( winux::StringMixedMap * fields );
125  virtual winux::String fieldName( int fieldIndex );
126  virtual winux::ulong fieldsCount();
127  virtual winux::ulong rowsCount();
128  virtual winux::String fieldType( int fieldIndex );
129 
130  bool reset();
131  operator bool() const { return _mysqlRes != NULL; }
132  operator struct st_mysql_res * () const { return _mysqlRes; }
133 private:
134  struct st_mysql_res * _mysqlRes;
136  winux::StringArray _fieldNames; // 非原始字段名
137  std::vector<winux::uint> _fieldTypes; // 字段类型
138  std::vector<winux::uint> _fieldFlags; // 字段Flag
139 
141 };
142 
144 {
145 public:
146  MySQLModifier( MySQLConnection * cnn, winux::String const & tableName );
147  virtual ~MySQLModifier();
148 
149 /* virtual bool addNew( winux::StringArray const & fieldNames, winux::MixedArray const & values );
150  virtual bool addNew( winux::Mixed const & fields );
151  virtual bool modify( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::Mixed const & prkValue );
152  virtual bool modify( winux::Mixed const & fields, winux::Mixed const & prkValue );
153  virtual int modifyEx( winux::StringArray const & fieldNames, winux::MixedArray const & values, winux::String const & where );
154  virtual int modifyEx( winux::Mixed const & fields, winux::String const & where );
155  virtual bool deleteOne( winux::Mixed const & prkValue );
156  virtual int deleteEx( winux::String const & where );*/
157 
158 protected:
159  virtual void _getTableInfo();
160 /* MySQLConnection * _cnn;
161  winux::String _tableName;
162  winux::StringArray _fieldNames; // 原始字段名
163  winux::String _prkName; // 主键名 */
164 
166 };
167 
168 }
169 
170 #endif // __EIENDB_MYSQL_HPP__
int getMySqlErrCode() const
数据结果操作接口
MySQLConnection * getCnn() const
数据库连接接口
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 char byte
Definition: utilities.hpp:159
MySQLDbError(int mysqlErrNo, winux::AnsiString const &s)
混合体,能表示多种类型的值
Definition: utilities.hpp:586
数据库通用接口
Definition: eiendb_base.hpp:7
文件接口
Definition: filesys.hpp:194
unsigned long ulong
Definition: utilities.hpp:129
MySQL数据库错误
std::basic_string< tchar > String
Definition: utilities.hpp:162