MySQL: 1 MySQL如何与系统建立连接

1.程序员认知中的数据库

①普遍的认知中: MySQL可以建库建表建索引,然后就是执行增删改查去更新和查询里面的数据。

②深层次问题:比如死锁异常、SQL性能太差、异常报错,等等。

③生产层面的问题:在生产环境下,如何基于MySQL底层原理去进行分析、排查和定位。

2.MySQL驱动

在Java系统中去访问一个MySQL数据库,必须得在系统的依赖中加入一个MySQL驱动,有了这个MySQL驱动才能跟MySQL数据库建立连接,然后执行各种各样的SQL语句。

上图就是引入到Maven配置中的MySQL驱动。

数据库与系统的连接

要访问数据库,必须得跟数据库建立一个网络连接。而这个连接就是由MySQL驱动来建立的。他会在底层跟数据库建立网络连接,有网络连接,接着才能去发送请求给数据库服务器!

当Java系统跟数据库之间有了网络连接之后,Java代码才能基于这个连接去执行各种各样的增删改查SQL语句。

所以对于Java语言开发的系统,MySQL会提供Java版本的MySQL驱动,对于PHP、Perl等各种常见的编程语言,MySQL都会提供对应语言的MySQL驱动,让各种语言编写的系统通过MySQL驱动去访问数据库。

3.数据库连接池

Java所开发的Web系统,是部署在Tomcat中的,那么Tomcat本身肯定是有多个线程来并发的处理同时接收到的多个请求。

单次连接的建立、销毁

如果Tomcat中的每个线程在每次访问数据库的时候,都基于MySQL驱动去创建一个数据库连接,然后执行SQL语句,然后执行完之后再去销毁这个数据库连接。

上面这种单次连接的建立、销毁,当Tomcat中上百个线程同时并发的频繁创建数据库连接,执行SQL语句,然后频繁的销毁数据库连接的场景下。其实是很不合理的。

数据库连接池

使用数据库连接池,就是在一个池子里维持多个数据库连接,让多个线程使用里面的不同的数据库连接去执行SQL语句,然后执行完SQL语句之后,不要销毁这个数据库连接,而是把连接放回池子里,后续还可以继续使用。

基于这样的一个数据库连接池的机制,就可以解决多个线程并发的使用多个数据库连接去执行SQL语句的问题,而且还避免了数据库连接使用完之后就销毁的问题。

常见的数据库连接池有DBCP,C3P0,Druid等等。

4.MySQL数据库的连接池的作用

前面说的是Tomcat中去和数据库进行连接所使用的数据库连接池,该连接池主要是提供给多线程并发的使用。

而在数据库这端,也有个连接池。系统要与MySQL数据库建立很多个连接,那么MySQL也必然要维护与系统之间的多个连接,所以MySQL架构体系中的第一个环节,就是连接池。

在系统每次跟MySQL建立连接的时候,还好根据系统传递过去的账号和密码,进行账号密码的验证,库表权限的验证。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Qt中与MySQL建立交互式连接,需要进行以下步骤: 1. 安装MySQL驱动程序:在Qt中使用MySQL需要安装MySQL驱动程序。你可以从Qt官方网站下载可用的驱动程序,也可以使用Qt提供的商业驱动程序。 2. 在Qt项目中包含MySQL头文件:在Qt项目中使用MySQL时,需要在代码中包含MySQL头文件。 3. 建立数据库连接:使用QSqlDatabase类在Qt中建立数据库连接。在连接数据库之前,需要设置数据库驱动程序和数据库名称。 4. 执行SQL语句:一旦连接成功,就可以使用QSqlQuery类执行SQL语句。你可以使用该类执行SELECT、INSERT、UPDATE和DELETE等SQL语句。 下面是一些示例代码,演示如何在Qt中与MySQL建立交互式连接: ```c++ #include <QCoreApplication> #include <QtSql> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 设置MySQL驱动程序 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("myusername"); db.setPassword("mypassword"); // 打开数据库连接 if (!db.open()) { qDebug() << "Failed to connect to database!"; return 1; } // 执行SQL查询 QSqlQuery query; query.exec("SELECT * FROM mytable"); while (query.next()) { QString name = query.value(0).toString(); int age = query.value(1).toInt(); qDebug() << name << age; } // 关闭数据库连接 db.close(); return a.exec(); } ``` 这只是一个简单的示例,你可以根据自己的需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值