Qdbc: Руководство по использованию
Этот фреймворк для работы с операционными базами данных относится к классу mybatis. Если вы уже работали с таким фреймворком, то вам будет проще разобраться в Qdbc.
Все операции SQL выполняются с помощью макрофункций, что делает работу с ними удобной и простой.
На данный момент это тестовая версия, которая может быть нестабильной. Чтобы узнать версию, можно использовать макрос Qversion в файле Qdbc.h. Если в версии есть буква «c», то это тестовая версия. Если «s» — стабильная версия.
Фреймворк называется Qdbc. Если есть другие фреймворки с таким же названием, рекомендуется изменить название.
CREATE TABLE Laneip (
id int(11) NOT NULL AUTO_INCREMENT ,
ip varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
port varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
url varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
entryno varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
etype int(255) NULL DEFAULT NULL ,
Status int(255) NULL DEFAULT 1 ,
description varchar(600) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (id)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=7
ROW_FORMAT=COMPACT;
Поле | Описание |
---|---|
id | Автоинкрементное поле |
ip | IP-адрес сайта |
port | Порт сайта |
url | URL сайта |
entryno | Идентификатор местоположения («0»: Пекин, «1»: Шанхай, «2»: Шэньчжэнь, «3»: Цзянсу) |
etype | Тип сайта (0: «корпоративный сайт», 1: «отраслевой сайт», 2: «B2B электронный бизнес») |
description | Состояние сети («сетевое исключение, тайм-аут соединения», «нормальная сеть») |
updatetime | Время обновления (если не указано, используется текущее время) |
#include <QtCore/QCoreApplication>
#include "dbc.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString ip;
Qselect("SELECT ip from laneip WHERE id = 2") > ip;
return a.exec();
}
В настоящее время есть два типа заполнителей: #{} и ${}. #{} и ${} должны полностью соответствовать свойствам ORM-классов. Несоответствие может привести к ошибкам. #{} представляет собой препроцессорный заполнитель, а ${} — простое объединение SQL.
void updatetest()
{
QString sql = "UPDATE laneip SET updatetime='${updatetime}' WHERE id=${id}";
int count;
Qupdate(sql) < QDateTime::currentDateTime() < 2 > count ;
qDebug() << "update1:" << count;
}
void transactionaltest()
{
Qtransactional();
Laneip lane;
lane.ip = "192.168.1.103";
lane.id = 2;
QString sql = "UPDATE laneip SET ip=#{ip} WHERE id=#{id}";
int count;
Qupdate("UPDATE laneip SET1 ip=#{ip} WHERE id=#{id}") < &lane > count;
lane.ip = "192.168.1.104";
lane.id = 2;
Qupdate(sql) < &lane > count;
qDebug() << "update:" << count;
}
Qswitch(const1) const1 — константа, которая может быть строкой или целым числом.
Qcase(const1, value1) const1 — константа, поддерживающая строку или целое число. value1 — значение const1, которое соответствует совпадению.
Qdefault(value1)
const1 — константа, поддерживающая строку или целое число. value1 — значение const1, которому не найдено соответствие.
Qforeach (begin, separator, end, collection)
Qforeach — это макрос цикла, аналогичный for. Его нужно использовать отдельно.
begin — параметр строки, который является начальной точкой collection.
separator — строковый параметр, который разделяет collection.
end — строчный параметр, который является конечной точкой collection.
collection — тип QString, QList, QStringList. QList можно заменить на IntList.
Qclear
Qclear — освобождение динамически выделенной памяти указателя переменной. Можно освободить вручную, иначе память будет освобождена автоматически.
QconfigPath (path, name)
Этот макрос должен быть настроен перед выполнением SQL-запроса, в противном случае настройка будет недействительной.
path — можно указать относительный путь или абсолютный путь. Для пути используйте обратную косую черту для кодирования пути. Например, C:/11/22. Если вы укажете пустую строку, то она будет равна пути исполняемого файла.
name — имя указанного файла конфигурации. Если name — пустая строка, используется имя по умолчанию: qjbctemplate.ini. В противном случае используется указанное имя файла конфигурации.
QBye()
Этот макрос используется для уничтожения и создания потоков в многопоточной среде. Необходимо поместить QBye () в конце потока.
QDBC_Id
Этот макрос определяет, какой поток печатает данные в многопоточных средах. Каждый раз, когда создаётся новый поток, QDBC_Id увеличивается на 1. Например: qDebug() << QDBC_Id << Object_utils::toString(lane);
Этот метод проверяет функцию Qif.
void iftest()
{
Laneip* lane = NULL;
QString ip = "192.168.1.104";
QString sql = "SELECT * FROM laneip WHERE id = ";
Qif(ip == "192.168.1.104", "2")
Qelse("0");
Qselect(sql) > lane;
if (lane == NULL) {
qDebug() << "error";
return;
}
qDebug() << Object_utils::toString(lane);
}
Этот метод тестирует функцию Qswitch. Возвращает:
void switchtest()
{
Laneip* lane = NULL;
QString ip = "192.168.1.104";
QString sql = "SELECT * FROM laneip WHERE id = ";
Qswitch(ip)
Qcase("192.168.1.100", "1")
Qcase("192.168.1.104", "2");
Qselect(sql) > lane;
if (lane == NULL) {
qDebug() << "error";
return;
}
qDebug() << Object_utils::toString(lane);
}
Этот метод тестирует функцию Qforeach. Возвращает список.
void foreachtest()
{
qDebug() << "QHello::selectAl start";
QList<Laneip*> lanelist;
IntList ls;
ls << 2 << 3;
QString sql = "SELECT * FROM laneip where id in" Qforeach("(", ",", ")", ls);
Qselect(sql) > lanelist;
qDebug() << QDBC_Id << Object_utils::toString(lanelist);
}
Использование макроса Qresults
Этот макрос требует соответствия @result_Id, @result, @one, @many.
#define result_Id (column, ...) — определение атрибута id. column определяет имя столбца базы данных. Если атрибут заполнен, он определяется как пользовательский атрибут, в противном случае атрибут имени столбца и атрибут совпадают.
#define result (column, ...) — определение класса атрибутов. column определяет имя столбца базы данных. Если атрибут заполнен, он определяется как пользовательский атрибут, в противном случае атрибут имени столбца и атрибут совпадают.
#define one (classname, ...) — определение связанного класса. classname — имя класса. Может использоваться для формирования многоуровневых вложенных объектов или связанных списков (только для Qlist). ip: 192.168.1.112 port: 100 url: www.google.com entryno: 111 etype: 1 Status: 1 description: нормально updatetime: 2020-04-30T17:24:19 && id: 6
ip: 192.168.1.112 port: 1144 url: www.google.com entryno: 2 etype: 2 Status: 1 description: сеть в норме updatetime: 2020-09-08T17:24:47 && ]"
QList<Laneip*> lane;
QString sql = "SELECT * FROM laneip";
Qselect(sql) > lane;
qDebug() << Object_utils::toString(lane);
Laneip *lane = NULL;
QString sql = "SELECT * FROM laneip WHERE id = #{lid}";
Qselect(sql) < 3 > lane;
if (lane == NULL) {
qDebug() << "error";
return;
}
Laneip pp;
Object_utils<Laneip>::copy(&pp, lane);
Этот файл конфигурации предназначен для версии «20.09». Если вы хотите добавить контент, вы можете сделать это в файле конфигурации. Описание файла конфигурации выглядит следующим образом:
[MYSQL] #暂时只要支持MYSQL
host=127.0.0.1 #数据库地址
port=3306 #数据库端口
dbname=test1 #数据库名
dbuser=root #用户名
dbpwd= #密码
isPool=true #释放开启线程,有true和false两张可选,如果是false,则[pool]不管用
timeout=2 #连接数据库的延迟
[TEMPLATE]
Loglevel=1 #日志水平,0代表全输出,1代表不输出
automemory=ture #如果为true,则有Qdbc来管理动态分配的内存,如果false则手动管理内存,Qclear宏将无效。
version=x.x.xc #版本既可以在配置文件看,也可以在Qdbc.h中查看,c为测试版本,s为稳定版
[pool]
initialPoolSize=4 #线程池的个数,暂时只支持默认的线程池,如需扩展,等待后续开发
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )