Tianchi  v0.0.2 build 20130701
C++ library for Qt with VC & mingW
tcdatabase.h
1 // **************************************************************************
2 // Tianchi C++ library for Qt (open source)
3 // 天池共享源码库
4 // 版权所有 (C) 天池共享源码库开发组
5 // 授权协议:请阅读天池共享源码库附带的授权协议
6 // **************************************************************************
7 // 文档说明:数据库操作类
8 // ==========================================================================
9 // 开发日志:
10 // 日期 人员 说明
11 // --------------------------------------------------------------------------
12 // 2013.05.03 圣域天子 建立
13 //
14 // ==========================================================================
16 // ==========================================================================
17 #ifndef TIANCHI_TCDATABASE_H
18 #define TIANCHI_TCDATABASE_H
19 
20 #include <tianchi/tcglobal.h>
21 
22 #include <QVariant>
23 #include <QMultiHash>
24 #include <QStringList>
25 #include <QSqlDatabase>
26 
27 typedef QHash<QString, QByteArray> TcParams;
28 class TIANCHI_API TcDatabase
29 {
30 public:
31  TcDatabase();
32  virtual ~TcDatabase(void);
33 
34  enum DBType
35  {
36  SQLSERVER = 1,
37  SQLITE = 11
38  };
39 
40  static char typeFrom(QVariant::Type type);
41 
42  static int dbType(const QString& typeName);
43  static TcParams addParams(const QStringList& keys,
44  const QList<QByteArray>& values);
45 
46 
48  void setDatabase(int dbType,
49  const QString& hostName, int hostPort,
50  const QString& dbName, const QString& username,
51  const QString& password);
53  bool setDatabase(const QString& typeName,
54  const QString& hostName, int hostPort,
55  const QString& dbName, const QString& username,
56  const QString& password);
58  void setDatabase(int dbType,
59  const QString& dbName,
60  const QString& username = QString(),
61  const QString& password = QString());
63  bool setDatabase(const QString& typeName,
64  const QString& dbName,
65  const QString& username = QString(),
66  const QString& password = QString());
67 
69  QString CreateDDL;
70 
71  QString SqlLibrary;
72 
74  QStringList errors;
75 
76  QString lastError();
77 
78 protected:
79  int m_dbType;
80  QString m_typeName;
81  QString m_hostName;
82  int m_hostPort;
83  QString m_dbName;
84  QString m_username;
85  QString m_password;
86 
87  QSqlDatabase m_handle;
88 
89  // 数据引擎
90  QString m_engineFile;
91  struct SQLContext
92  {
93  QString id;
94  QString text;
95  QMultiHash<QString, QString> params;
96  };
97  QHash<QString, SQLContext> m_sqls;
98  void clearComment(QString& s);
99 
101  QSqlQuery* prepare(const QString& sqlID, TcParams prams,
102  QString& error, int userNo = 0,
103  const QString& userID = QString(),
104  const QString& username = QString());
105 public:
106  inline int dbType() const { return m_dbType; }
107  inline QString typeName() const { return m_typeName; }
108  inline QString hostName() const { return m_hostName; }
109  inline int hostPort() const { return m_hostPort; }
110  inline QString dbName() const { return m_dbName; }
111 
112  inline QSqlDatabase handle() const { return m_handle; }
113  inline int sqlCount() const { return m_sqls.count(); }
114 
115 public:
124  int open();
125 
128  void close();
129 
131  inline bool isOpened() const { return m_handle.isOpen(); }
132 
134  void loadEngine();
136  void loadEngine(const QString& filename);
137 
139  bool exec(int& result, const QString& sqlID,
140  const TcParams& prams,
141  int userNo = 0,
142  const QString& userID = QString(),
143  const QString& username = QString());
145  bool exec(QVariantList& list,
146  const QString& sqlID,
147  const TcParams& params,
148  int userNo = 0,
149  const QString& userID = QString(),
150  const QString& username = QString());
152  int exec(int& result, QVariantList& list,
153  const QString& sqlID, const TcParams& params,
154  int userNo = 0,
155  const QString& userID = QString(),
156  const QString& username = QString());
158  int exec(int& result, QList<QByteArray>& list,
159  const QString& sqlID, const TcParams& params,
160  int userNo = 0,
161  const QString& userID = QString(),
162  const QString& username = QString());
163 };
164 
165 #endif // TIANCHI_TCDATABASE_H