免费三网合一网站系统,网站制作苏州企业,如何做打码网站,wordpress登录页logo修改本篇总结一下一下Ubuntu下QT操作Mysql数据库。
目录
1. 启动Mysql数据库服务器
2.查看QT支持的数据库驱动
3.连接数据库
4. 增加表和记录
5. 删除记录
6. 修改记录
7. 查询记录
8.完整代码和运行效果
常见错误总结#xff1a;
(1) 数据库服务没启动报错信息
(2) 有…本篇总结一下一下Ubuntu下QT操作Mysql数据库。
目录
1. 启动Mysql数据库服务器
2.查看QT支持的数据库驱动
3.连接数据库
4. 增加表和记录
5. 删除记录
6. 修改记录
7. 查询记录
8.完整代码和运行效果
常见错误总结
(1) 数据库服务没启动报错信息
(2) 有QMYSQL驱动连接数据缺失败 1. 启动Mysql数据库服务器
// 启动
sudo /etc/init.d/mysql start
// 重启
sudo /etc/init.d/mysql restart
// 关闭
sudo /etc/init.d/mysql stop 2.查看QT支持的数据库驱动
Qt SQL模块是Qt提供的一个访问数据库的接口支持多种平台下使用不同类型的数据库在这个过程中数据库驱动起到了很大的作用它负责与不同的数据库进行通信有了数据库驱动我们才能使用不同类型的数据库。
#include QtSql/QSqlDatabase// 查看支持的数据库驱动
qDebug() QSqlDatabase::drivers();3.连接数据库
QSqlDatabase db;
if(QSqlDatabase::contains(qt_sql_default_connection)) {db QSqlDatabase::database(qt_sql_default_connection);
}
else {// 创建一个数据库连接指定数据库驱动db QSqlDatabase::addDatabase(QMYSQL);
}// 数据库连接需要设置的信息
db.setHostName(127.0.0.1); // 数据库服务器IP我用的是本地电脑
db.setDatabaseName(TestDB);// 数据库名
db.setUserName(root);// 用户名
db.setPassword(mysql);// 密码
db.setPort(3306);// 端口号// 连接数据库
bool ok db.open();if (ok) {qDebug() 连接成功;
}
else {qDebug() 连接失败;
}
4. 增加表和记录
// 实例化QSqlQuery用于执行sql语句
QSqlQuery query(m_db);
// 创建一个表
query.exec(create table newUser (id int primary key, username varchar(20)));
QSqlQuery query(m_db);
query.exec(INSERT INTO newUser (id, username) VALUES (1, Hello));int userid 2;
QString name 张三;
query.prepare(INSERT INTO newUser (id, username) VALUES (:id, :username));
query.bindValue(:id, userid);
query.bindValue(:username, name);
query.exec();query.exec(INSERT INTO newUser (id, username) VALUES (3, Andy));
query.exec(INSERT INTO newUser (id, username) VALUES (4, 李四));
5. 删除记录
QSqlQuery query(m_db);
query.prepare(DELETE FROM newUser WHERE username:username);
query.bindValue(:username, 张三);
query.exec();
6. 修改记录
QSqlQuery query(m_db);
query.prepare(update newUser set username:username WHERE id:id);
query.bindValue(:id, 1);
query.bindValue(:username, World);
query.exec();
7. 查询记录 // 查询所有QString sql SELECT id, username FROM newUser ; // 组装sql语句QSqlQuery query(m_db); // [1] 传入数据库连接query.exec(sql); // [2] 执行sql语句while (query.next()) { // [3] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}// 查询指定记录QString username 李四;sql SELECT * FROM newUser WHERE username username ;query.exec(sql); // [2] 执行sql语句while (query.next()) { // [3] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}// 绑定数据查询username 张三;sql SELECT * FROM newUser WHERE username:username;query.prepare(sql); // [2] 使用名称绑定的方式解析 SQL 语句query.bindValue(:username, username); // [3] 把占位符替换为传入的参数query.exec(); // [4] 执行数据库操作while (query.next()) { // [5] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}
8.完整代码和运行效果
qt_mysql.pro
#-------------------------------------------------
#
# Project created by QtCreator 2023-09-05T23:12:20
#
#-------------------------------------------------QT core gui
QT sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET qt_mysql
TEMPLATE app# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES \main.cpp \mainwindow.cppHEADERS \mainwindow.hFORMS \mainwindow.uimainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QtSql/QSqlDatabase
#include QDebugnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent 0);~MainWindow();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_clear_table_clicked();private:void createConnectionByName(const QString connectionName); //使用自定义 connectionName 创建连接QSqlDatabase getConnectionByName(const QString connectionName); // 使用自定义 connectionName 获取连接private:Ui::MainWindow *ui;QSqlDatabase m_db;
};#endif // MAINWINDOW_Hmainwindow.cpp
#include mainwindow.h
#include ui_mainwindow.h
#include QSqlQuery/*
Qt SQL模块是Qt提供的一个访问数据库的接口支持多种平台下使用不同类型的数据库在这个过程中
数据库驱动起到了很大的作用它负责与不同的数据库进行通信有了数据库驱动我们才能使用不同类型的数据库。*/MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);// 创建名为 firstMysqlConnect 的数据库连接createConnectionByName(firstMysqlConnect);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 查看支持的数据库驱动qDebug() QSqlDatabase::drivers();
}//使用自定义 connectionName 创建连接
void MainWindow::createConnectionByName(const QString connectionName){m_db QSqlDatabase::addDatabase(QMYSQL, connectionName);// 数据库连接需要设置的信息m_db.setHostName(127.0.0.1); // 数据库服务器IP我用的是本地电脑m_db.setDatabaseName(TestDB);// 数据库名m_db.setUserName(root);// 用户名m_db.setPassword(mysql);// 密码m_db.setPort(3306);// 端口号// 连接数据库判断bool ok m_db.open();if (ok){qDebug() 连接成功;} else {qDebug() 连接失败;}}// 使用自定义 connectionName 获取连接
QSqlDatabase MainWindow::getConnectionByName(const QString connectionName) {// 获取数据库连接return QSqlDatabase::database(connectionName);
}void MainWindow::on_pushButton_2_clicked()
{QSqlDatabase db;if(QSqlDatabase::contains(qt_sql_default_connection)) {db QSqlDatabase::database(qt_sql_default_connection);}else {// 创建一个数据库连接指定数据库驱动db QSqlDatabase::addDatabase(QMYSQL);}// 数据库连接需要设置的信息db.setHostName(127.0.0.1); // 数据库服务器IP我用的是本地电脑db.setDatabaseName(TestDB);// 数据库名db.setUserName(root);// 用户名db.setPassword(mysql);// 密码db.setPort(3306);// 端口号// 连接数据库bool ok db.open();if (ok) {qDebug() 连接成功;}else {qDebug() 连接失败;}
}void MainWindow::on_pushButton_3_clicked()
{// 实例化QSqlQuery用于执行sql语句QSqlQuery query(m_db);// 创建一个表query.exec(create table newUser (id int primary key, username varchar(20)));
}void MainWindow::on_pushButton_4_clicked()
{QSqlQuery query(m_db);query.exec(INSERT INTO newUser (id, username) VALUES (1, Hello));int userid 2;QString name 张三;query.prepare(INSERT INTO newUser (id, username) VALUES (:id, :username));query.bindValue(:id, userid);query.bindValue(:username, name);query.exec();query.exec(INSERT INTO newUser (id, username) VALUES (3, Andy));query.exec(INSERT INTO newUser (id, username) VALUES (4, 李四));
}void MainWindow::on_pushButton_5_clicked()
{QSqlQuery query(m_db);query.prepare(DELETE FROM newUser WHERE username:username);query.bindValue(:username, 张三);query.exec();
}void MainWindow::on_pushButton_6_clicked()
{QSqlQuery query(m_db);query.prepare(update newUser set username:username WHERE id:id);query.bindValue(:id, 1);query.bindValue(:username, World);query.exec();
}void MainWindow::on_pushButton_7_clicked()
{// 查询所有QString sql SELECT id, username FROM newUser ; // 组装sql语句QSqlQuery query(m_db); // [1] 传入数据库连接query.exec(sql); // [2] 执行sql语句while (query.next()) { // [3] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}// 查询指定记录QString username 李四;sql SELECT * FROM newUser WHERE username username ;query.exec(sql); // [2] 执行sql语句while (query.next()) { // [3] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}// 绑定数据查询username 张三;sql SELECT * FROM newUser WHERE username:username;query.prepare(sql); // [2] 使用名称绑定的方式解析 SQL 语句query.bindValue(:username, username); // [3] 把占位符替换为传入的参数query.exec(); // [4] 执行数据库操作while (query.next()) { // [5] 遍历查询结果qDebug() QString(Id: %1, Username: %2).arg(query.value(id).toInt()).arg(query.value(username).toString());}
}void MainWindow::on_pushButton_clear_table_clicked()
{QSqlQuery query(m_db);query.exec(DELETE FROM newUser);
}main.cpp
#include mainwindow.h
#include QApplicationint main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}mainwindow.ui
?xml version1.0 encodingUTF-8?
ui version4.0classMainWindow/classwidget classQMainWindow nameMainWindowproperty namegeometryrectx0/xy0/ywidth693/widthheight412/height/rect/propertyproperty namewindowTitlestringMainWindow/string/propertywidget classQWidget namecentralWidgetlayout classQGridLayout namegridLayoutitem row0 column0widget classQPushButton namepushButtonproperty nametextstring查看数据库驱动/string/property/widget/itemitem row0 column1widget classQPushButton namepushButton_2property nametextstring连接mysql数据库/string/property/widget/itemitem row1 column0widget classQPushButton namepushButton_3property nametextstring创建表/string/property/widget/itemitem row1 column1widget classQPushButton namepushButton_4property nametextstring插入记录/string/property/widget/itemitem row2 column0widget classQPushButton namepushButton_5property nametextstring删除记录/string/property/widget/itemitem row2 column1widget classQPushButton namepushButton_6property nametextstring修改记录/string/property/widget/itemitem row3 column0widget classQPushButton namepushButton_7property nametextstring查询记录/string/property/widget/itemitem row3 column1widget classQPushButton namepushButton_clear_tableproperty nametextstring删除表中所有数据/string/property/widget/item/layout/widgetwidget classQMenuBar namemenuBarproperty namegeometryrectx0/xy0/ywidth693/widthheight39/height/rect/property/widgetwidget classQToolBar namemainToolBarattribute nametoolBarAreaenumTopToolBarArea/enum/attributeattribute nametoolBarBreakboolfalse/bool/attribute/widgetwidget classQStatusBar namestatusBar//widgetlayoutdefault spacing6 margin11/resources/connections/
/ui常见错误总结
(1) 数据库服务没启动报错信息 (2) 有QMYSQL驱动连接数据缺失败 原因Qt对Mysql进行了封装库名为libqsqlmysql.so但是其还需要调用Mysql的客户端库才能真正连接数据库如下可以看到libqsqlmysql.so需要依赖libmysqlclient.so.18。