目录
简述
1. 通过注释生成C++类
1.1 模糊生成
1.2 把控细节,让结果更精准
1.3 让DeepSeek自动生成代码
2. 验证DeepSeek自动生成的代码
2.1 安装SQLite命令行工具
2.2 验证DeepSeek代码
3. 测试代码下载
简述
在现代软件开发中,自动化编程工具如 DeepSeek 为开发人员带来了极大的便利。本文将展示如何借助 DeepSeek 实现一个基于 Qt6 对数据库进行增删改查 的 C++ 类。通过为 C++ 类添加详细的注释,使用 DeepSeek 进行代码的自动化补全。
1. 通过注释生成C++类
1.1 模糊生成
自己也不明白需要实现什么细节的情况下,写一个大致的提示词即可。DeepSeek 会自动生成相应的代码。(可能给出的结果无法让你满意,就像领导布置的任务一样,你先做,做完我再看,大概率是要返工的)
提示词:
帮我写一个c++接口类,用Qt6实现对SQLite数据库的增删改查。
如果有进一步的要求,那么将先把接口定义出来,将注释写好,通过DeepSeek的推理功能去实现。
1.2 把控细节,让结果更精准
提示词:
//要求:帮我写一个c++接口类,用Qt6实现对sqlite数据库的增删改查。 //请按照注释补全接口代码,同时包含所需的头文件、成员变量。 class SQLiteManager { public: /** * 构造函数,初始化SQLite数据库连接。 * @param dbName 数据库文件名(包括路径)。 */ SQLiteManager(const QString &dbName); /** * 析构函数,关闭数据库连接并清理资源。 */ ~SQLiteManager(); /** * 创建表。 * @param tableName 表名。 * @param columns 表的列定义,格式为"column1 type1, column2 type2, ..."。 * @return 是否成功创建表。 */ bool createTable(const QString &tableName, const QString &columns); /** * 插入数据。 * @param tableName 表名。 * @param columns 列名列表,格式为{"column1", "column2", ...}。 * @param values 对应列的值,格式为{value1, value2, ...}。 * @return 是否成功插入数据。 */ bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values); /** * 更新数据。 * @param tableName 表名。 * @param setClause 设置子句,格式为"column1 = value1, column2 = value2"。 * @param whereClause WHERE子句,格式为"column = value"。 * @return 是否成功更新数据。 */ bool update(const QString &tableName, const QString &setClause, const QString &whereClause); /** * 删除数据。 * @param tableName 表名。 * @param whereClause WHERE子句,格式为"column = value"。 * @return 是否成功删除数据。 */ bool remove(const QString &tableName, const QString &whereClause); /** * 查询数据。 * @param tableName 表名。 * @param columns 查询的列名,格式为"column1, column2"。默认为"*",表示查询所有列。 * @param whereClause WHERE子句,格式为"column = value"。默认为空。 * @return 查询结果模型(QSqlQueryModel)。 */ QSqlQueryModel *select(const QString &tableName, const QString &columns = "*", const QString &whereClause = ""); };
复制
要点:
说明接口需求,要实现一个什么样的功能,需要分为几个接口实现?
然后通过注释给出接口的规范,包括:
- 接口的描述
- 输入与输出
- 返回值
1.3 让DeepSeek自动生成代码
将1.2中的详细提示词写完后,保存到文件 或者 直接复制给 DeepSeek:
推理中:
以下是DeepSeek实现的SQLiteManager类:
#include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QSqlQueryModel> #include <QVariant> #include <QStringList> class SQLiteManager { private: QSqlDatabase m_db; public: SQLiteManager(const QString &dbName) { m_db = QSqlDatabase::addDatabase("QSQLITE"); m_db.setDatabaseName(dbName); if (!m_db.open()) { qWarning() << "Failed to open database:" << m_db.lastError().text(); } } ~SQLiteManager() { if (m_db.isOpen()) { m_db.close(); } QSqlDatabase::removeDatabase(m_db.connectionName()); } bool createTable(const QString &tableName, const QString &columns) { QSqlQuery query(m_db); QString sql = QString("CREATE TABLE IF NOT EXISTS %1 (%2)").arg(tableName, columns); if (!query.exec(sql)) { qWarning() << "Create table failed:" << query.lastError().text(); return false; } return true; } bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values) { if (columns.size() != values.size()) return false; QSqlQuery query(m_db); QString cols = columns.join(", "); QString placeholders = QStringList(columns.size(), "?").join(", "); query.prepare(QString("INSERT INTO %1 (%2) VALUES (%3)").arg(tableName, cols, placeholders)); for (const auto &value : values) { query.addBindValue(value); } if (!query.exec()) { qWarning() << "Insert failed:" << query.lastError().text(); return false; } return true; } bool update(const QString &tableName, const QString &setClause, const QString &whereClause) { QSqlQuery query(m_db); QString sql = QString("UPDATE %1 SET %2 WHERE %3").arg(tableName, setClause, whereClause); if (!query.exec(sql)) { qWarning() << "Update failed:" << query.lastError().text(); return false; } return true; } bool remove(const QString &tableName, const QString &whereClause) { QSqlQuery query(m_db); QString sql = QString("DELETE FROM %1 WHERE %2").arg(tableName, whereClause); if (!query.exec(sql)) { qWarning() << "Delete failed:" << query.lastError().text(); return false; } return true; } QSqlQueryModel* select(const QString &tableName, const QString &columns, const QString &whereClause) { QSqlQueryModel *model = new QSqlQueryModel(); QString sql = QString("SELECT %1 FROM %2").arg(columns, tableName); if (!whereClause.isEmpty()) { sql += QString(" WHERE %1").arg(whereClause); } model->setQuery(sql, m_db); if (model->lastError().isValid()) { qWarning() << "Query failed:" << model->lastError().text(); delete model; return nullptr; } return model; } };
复制
头文件依赖:需要包含Qt SQL模块,在.pro文件中添加:
QT += sql
复制
或者在CMakeLists.txt中追加Sql,修改以下部分:
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql) target_link_libraries(deepseek_sqlite1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql )
复制
功能特性:
- 自动处理数据库连接的生命周期
- 使用预编译语句防止SQL注入(INSERT操作)
- 返回可直接用于Qt视图组件的QSqlQueryModel
- 详细的错误日志输出
扩展建议:
// 可添加事务支持 bool beginTransaction() { return m_db.transaction(); } bool commit() { return m_db.commit(); } bool rollback() { return m_db.rollback(); }
复制
2. 验证DeepSeek自动生成的代码
2.1 安装SQLite命令行工具
相关阅读:SQLite 安装教程以及可视化工具介绍
2.2 验证DeepSeek代码
#include <QApplication> #include <QTableView> #include "sqlite_manager.h" int main(int argc, char **argv) { QApplication app(argc, argv); SQLiteManager db("D:/test.db"); db.createTable("users", "id INTEGER PRIMARY KEY, name TEXT, age INTEGER"); // 插入数据 db.insert("users", {"name", "age"}, {"Alice", 25}); // 更新数据 //db.update("users", "age = 26", "name = 'Alice'"); // 删除数据 //db.remove("users", "age > 30"); // 查询数据 - 查询所有users数据 QSqlQueryModel *model = db.select("users", "*", ""); QTableView tableView; tableView.setModel(model); tableView.show(); return app.exec(); }
复制
运行:
3. 测试代码下载
通过网盘分享的文件:deepseek_sqlite1.zip
链接: https://pan.baidu.com/s/1IkH--pFYf4TzU7bmtaBdZA?pwd=2wyg 提取码: 2wyg