使用DeepSeek实现自动化编程:类的自动生成

目录

简述

[1. 通过注释生成C++类](#1. 通过注释生成C++类)

[1.1 模糊生成](#1.1 模糊生成)

[1.2 把控细节,让结果更精准](#1.2 把控细节,让结果更精准)

[1.3 让DeepSeek自动生成代码](#1.3 让DeepSeek自动生成代码)

[2. 验证DeepSeek自动生成的代码](#2. 验证DeepSeek自动生成的代码)

[2.1 安装SQLite命令行工具](#2.1 安装SQLite命令行工具)

[2.2 验证DeepSeek代码](#2.2 验证DeepSeek代码)

[3. 测试代码下载](#3. 测试代码下载)


简述

在现代软件开发中,自动化编程工具如 DeepSeek 为开发人员带来了极大的便利。本文将展示如何借助 DeepSeek 实现一个基于 Qt6 对数据库进行增删改查 的 C++ 类。通过为 C++ 类添加详细的注释,使用 DeepSeek 进行代码的自动化补全。


1. 通过注释生成C++类

1.1 模糊生成

自己也不明白需要实现什么细节的情况下,写一个大致的提示词即可。DeepSeek 会自动生成相应的代码。(可能给出的结果无法让你满意,就像领导布置的任务一样,你先做,做完我再看,大概率是要返工的)

提示词:

帮我写一个c++接口类,用Qt6实现对SQLite数据库的增删改查。

如果有进一步的要求,那么将先把接口定义出来,将注释写好,通过DeepSeek的推理功能去实现。


1.2 把控细节,让结果更精准

提示词:

cpp 复制代码
//要求:帮我写一个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类:

cpp 复制代码
#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文件中添加:

cpp 复制代码
QT += sql

或者在CMakeLists.txt中追加Sql,修改以下部分:

cpp 复制代码
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
  • 详细的错误日志输出

扩展建议

cpp 复制代码
// 可添加事务支持
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代码

cpp 复制代码
#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

相关推荐
图扑软件2 小时前
图扑农牧林数据分析可视化平台:智慧农业的“数字大脑”
javascript·人工智能·信息可视化·数据挖掘·数据分析·数字孪生·可视化
维维180-3121-14552 小时前
AI与机器学习、深度学习在气候变化预测中的应用
人工智能·深度学习·机器学习
赵庆明老师2 小时前
【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
服务器·数据库·ubuntu
niandb2 小时前
The Rust Programming Language 学习 (一)
linux·c语言·c++·学习·rust
调皮的芋头3 小时前
【数据挖掘在量化交易中的应用:特征发现与特征提取】
人工智能·神经网络·数据挖掘
Dnelic-3 小时前
Android 数据库查询对比(APN案例)
android·数据库·数据库开发·telephony
灰勒塔德3 小时前
回溯算法(C/C++)
c语言·c++·算法
原来是猿4 小时前
蓝桥备赛(四)- 数组(上)
开发语言·c++·sql·算法
Matlab程序猿小助手4 小时前
【MATLAB源码-第268期】基于simulink的永磁同步电机PMSM双闭环矢量控制系统SVPWM仿真,输出转速响应曲线。
开发语言·人工智能·单片机·嵌入式硬件·算法·matlab·simulink