00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef DBSTORE_H
00024 #define DBSTORE_H
00025
00026 #include <QtSql>
00027 #include <QString>
00028 #include <QList>
00029
00047 template<typename T>
00048 class DBStore
00049 {
00050 public:
00051
00057 explicit DBStore(int num) : _fieldCount(num), _rowCount(0) { }
00058
00064 ~DBStore() { }
00065
00078 void load(QString table, QSqlDatabase *db) {
00079 if (!db || !db->isOpen() || table.isEmpty() || !_fieldCount)
00080 return;
00081
00082 QSqlQuery query = db->exec("SELECT * FROM `" + table + "`");
00083
00084 if (db->driver()->hasFeature(QSqlDriver::QuerySize))
00085 _rowCount = query.size();
00086 else {
00087 query.last();
00088 _rowCount = query.at() + 1;
00089 }
00090
00091 query.first();
00092
00093 if (_rowCount <= 0 || !query.isValid())
00094 return;
00095
00096 forever {
00097 T *data = new T;
00098 for (int i = 0; i < _fieldCount; i++)
00099 data->setData(i, query.value(i));
00100 _data.append(data);
00101 if (!query.next())
00102 break;
00103 }
00104 return;
00105 }
00106
00112 void addData(T *data) {
00113 if (data) {
00114 _data.append(data);
00115 _rowCount++;
00116 }
00117 }
00118
00124 T *getData(int index) {
00125 return (_rowCount <= index)
00126 ? NULL : _data.at(index);
00127 }
00128
00134 void removeData(int index) {
00135 if (_rowCount <= index)
00136 return;
00137 T *data = _data.takeAt(index);
00138 _rowCount--;
00139 delete data;
00140 }
00141
00147 int getNumRows() {
00148 return _rowCount;
00149 }
00150
00156 int getNumFields() {
00157 return _fieldCount;
00158 }
00159
00165 void clear() {
00166 qDeleteAll(_data);
00167 _data.clear();
00168 }
00169
00170 private:
00172 QList<T*> _data;
00174 int _fieldCount;
00176 int _rowCount;
00177 };
00178
00179 #endif // DBSTORE_H