bind query.c

本文介绍了一个DNS查询系统的核心数据结构及功能。详细分析了ns_query结构体,它用于管理DNS查询的各种属性,如属性标志、重启次数、定时器设置等,并概述了其内部函数调用关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整体结构分析

主要包含处理各种类型和情况的查询函数,多数函数仅仅为该文件内的其它调用,以便方便的完成查询。ns_query_start()函数向外提供完整的查询服务。

数据结构

/*% nameserver query structure */
struct ns_query {
    unsigned int            attributes;
    unsigned int            restarts;
    isc_boolean_t           timerset;
    dns_name_t *            qname;
    dns_name_t *            origqname;
    unsigned int            dboptions;
    unsigned int            fetchoptions;
    dns_db_t *          gluedb;
    dns_db_t *          authdb;
    dns_zone_t *            authzone;
    isc_boolean_t           authdbset;
    isc_boolean_t           isreferral;
    isc_mutex_t         fetchlock;
    dns_fetch_t *           fetch;
    isc_bufferlist_t        namebufs;
    ISC_LIST(ns_dbversion_t)    activeversions;
    ISC_LIST(ns_dbversion_t)    freeversions;
};

函数调用关系

这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

#include "c.h"//借还管理 #include "ui_c.h" #include "a.h" C::C(QWidget *parent) : QMainWindow(parent) , ui(new Ui::C) { ui->setupUi(this); this->setWindowTitle("借还管理"); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // SQLite示例 db.setDatabaseName("D:/qtfile/serve1/data.db"); // 数据库文件路径 if (!db.open()) { qDebug() << "数据库连接失败:" << db.lastError().text(); return; } //创建表 QSqlQuery query; if (!query.exec("CREATE TABLE IF NOT EXISTS equipment (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "name TEXT NOT NULL," "type TEXT NOT NULL," "status INTEGER DEFAULT 0," "lend_out_date DATE," "return_date DATE," "people TEXT NOT NULL," "phone TEXT NOT NULL);")) { qDebug() << "建表错误:" << query.lastError().text(); } //插入两条数据 QSqlQuery checkQuery("SELECT COUNT(*) FROM equipment;"); if (checkQuery.next() && checkQuery.value(0).toInt() == 0) { QSqlQuery insertQuery; // 第一条数据 insertQuery.prepare("INSERT INTO equipment (name, type, status, lend_out_date,return_date,people,phone) " "VALUES (:name, :type, :status, :date_1, :date_2, :people, :phone)"); insertQuery.bindValue(":name", "光谱分析仪"); insertQuery.bindValue(":type", "实验室设备"); insertQuery.bindValue(":status", 0); insertQuery.bindValue(":date_1", QDate(2023, 5, 10)); insertQuery.bindValue(":date_2", QDate()); insertQuery.bindValue(":people", "张洪平"); insertQuery.bindValue(":phone", "19923688556"); if (!insertQuery.exec()) { qDebug() << "插入数据失败:" << insertQuery.lastError().text(); } // 第二条数据 insertQuery.prepare("INSERT INTO equipment (name, type, status, lend_out_date, return_date, people, phone ) " "VALUES (:name, :type, :status, :date_1, :date_2, :people, :phone)"); insertQuery.bindValue(":name", "离心机"); insertQuery.bindValue(":type", "生物设备"); insertQuery.bindValue(":status", 1); insertQuery.bindValue(":date_1", QDate(2022, 11, 20)); insertQuery.bindValue(":date_2", QDate(2023, 7, 9)); insertQuery.bindValue(":people", "张洪平"); insertQuery.bindValue(":phone", "19923688556"); if (!insertQuery.exec()) { qDebug() << "插入数据失败:" << insertQuery.lastError().text(); } } model = new QSqlTableModel(this); model->setTable("equipment"); // 设置数据库表名 model->setEditStrategy(QSqlTableModel::OnManualSubmit); // 手动提交修改 model->setSort(model->fieldIndex("ID"),Qt::AscendingOrder);//按id排序 model->select();//加载数据 // 设置列标题 model->setHeaderData(0, Qt::Horizontal, tr("ID")); model->setHeaderData(1, Qt::Horizontal, tr("设备名称")); model->setHeaderData(2, Qt::Horizontal, tr("设备类型")); model->setHeaderData(3, Qt::Horizontal, tr("借还状态")); model->setHeaderData(4, Qt::Horizontal, tr("借出日期")); model->setHeaderData(5,Qt::Horizontal, tr("归还日期")); model->setHeaderData(6, Qt::Horizontal, tr("借用人")); model->setHeaderData(7,Qt::Horizontal, tr("手机")); // 加载数据 if (!model->select()) { qDebug() << "数据加载失败:" << model->lastError().text(); } ui->tableView->setModel(model);//绑定模型 ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableView->setModel(model); ui->tableView->resizeColumnsToContents(); // 自动调整列宽 ui->tableView->show(); } C::~C() { delete ui; } void C::on_pushButton_clicked()//返回按钮 { A *w=new A(); w->show(); this->hide(); } void C::on_pushButton_2_clicked()//退出按钮 { this->close(); } //借出记录 void C::on_action_triggered() { model->setFilter(""); } //归还记录 void C::on_action_2_triggered(){ model->setFilter("status <> 0");// 排除状态为0的记录 } void C::on_action_3_triggered() { QDialog dialog(this); dialog.setWindowTitle("添加新记录"); dialog.setMinimumWidth(300); // 创建布局 QVBoxLayout *mainLayout = new QVBoxLayout(&dialog); QFormLayout *formLayout = new QFormLayout(); // 创建输入控件 QLineEdit *nameEdit = new QLineEdit(&dialog);//equipment QLineEdit *typeEdit = new QLineEdit(&dialog); QLineEdit *lend_out_dateEdit = new QLineEdit(&dialog); QLineEdit *peopleEdit= new QLineEdit(&dialog); QLineEdit *phoneEdit= new QLineEdit(&dialog); // 添加控件到表单 formLayout->addRow("设备名称:", nameEdit); formLayout->addRow("设备类型:", typeEdit); formLayout->addRow("借出时间:", lend_out_dateEdit); formLayout->addRow("借用人:", peopleEdit); formLayout->addRow("手机·:", phoneEdit); // 创建按钮 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog); mainLayout->addLayout(formLayout); mainLayout->addWidget(buttonBox); // 连接按钮信号 connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); // 显示对话框并处理结果 if (dialog.exec() == QDialog::Accepted) { // 获取输入值 QString name = nameEdit->text().trimmed(); QString type = typeEdit->text().trimmed(); QString date_1= lend_out_dateEdit->text().trimmed(); QString date_2= ""; QString status = "0"; QString people = peopleEdit->text().trimmed(); QString phone = phoneEdit->text().trimmed(); // 验证输入 if (name.isEmpty()) { QMessageBox::warning(this, "输入错误", "设备名不能为空"); return; } // 在模型末尾插入新行 int rowNum = model->rowCount(); model->insertRow(rowNum); // 设置新记录的值 model->setData(model->index(rowNum, model->fieldIndex("ID")), rowNum+1); model->setData(model->index(rowNum, model->fieldIndex("设备名称")), name); model->setData(model->index(rowNum, model->fieldIndex("设备类型")), type); model->setData(model->index(rowNum, model->fieldIndex("借还状态")), status); model->setData(model->index(rowNum, model->fieldIndex("借用时间")), date_1); model->setData(model->index(rowNum, model->fieldIndex("归还时间")), date_2); model->setData(model->index(rowNum, model->fieldIndex("借用人")),people); model->setData(model->index(rowNum, model->fieldIndex("手机")), phone); // 自动滚动到新添加的行 ui->tableView->scrollToBottom(); } } 为什么最终table view仅显示了ID
最新发布
07-09
Diboot是一个面向开发人员的低代码开发平台,将重复性的工作自动化,提高质量、效率、可维护性。 diboot主要有diboot-core和diboot-devtools组成,diboot-core又为springboot专门封装了diboot-core-spring-boot-starter组件,diboot-devtools也以starter提供。 diboot特点: 1、专门为springboot开发,引入依赖,配置好相对路径即可使用; 2、并且支持较为常用的五种数据库(MySQL,ORACLE,SQLServer,PostgreSQL,MariaDB); 3、代码自动生成到项目相应的目录下; 4、数据库表结构更改后,可以同步更改对应文件的代码,而不影响到你自己写的代码; 5、基础框架中依靠注解实现的数据关联(一对一、一对多、多对多、数据字典关联等),将关联问题简单化了; 6、对数据关联设置简单,代码生成与更新也可以自动支持一对一、一对多、多对多、数据字典关联; 7、支持开发以及维护过程中对数据库相关表的数据结构更改进行记录,并写入到对应的数据库更改日志文件中; 8、支持启用lombok的代码形式; 9、支持启用swagger的项目; 10、依赖少、简便轻量、灵活性高。   Diboot轻代码开发平台 更新日志: v2.2.1 新增: @BindQuery注解新增strategy参数,支持空值处理策略(默认忽略空字符串) 基于Spring的内存缓存实现(BaseCacheManager),并优化绑定缓存实现 SqlFileInitializer新增executeMultipleUpdateSqlsWithTransaction,支持事务的多SQL更新 BaseService新增IService的getMap(queryWrapper)等接口 @CollectThisApi注解,自动提取注解对应的rest接口 工具类 S.splitToList,D.formatDurationLabel等 优化: 关联绑定的实现中字段名列名的转换由规则转换改为精确转换 支持BindField&BindDict组合使用 BeanUtils.convertValueToFieldType支持LocalDateTime转换 修复: 修复@BindQuery查询不支持自定义逻辑删除字段的问题 升级依赖jar至最新(spring boot 2.4.5, mybatis-plus 3.4.2等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值