MySQL --JDBC
一.什么是JDBC
JDBC(JavaDataBaseConnectivity,Java数据库连接)是Java程序和数据库之间的桥梁,包含 了⼀套Java定义的⽤于执⾏SQL语句的接⼝,使开发者能够编写数据库的程序。JDBC的主要作⽤是: 与数据库建⽴连接、发送SQL语句和处理数据库执⾏结果。
二.JDBC的使用过程
再使用客户端操作数据库时是以下步骤:
连接数据库服务--》发送SQL程序--》得到返回结果并显示--》关闭连接
同样如果使⽤程序操作数据库也会经历以上⼏步,⼤家应该可以想到,为实现上述步骤,可以编写 相应的代码实现数据库连接,发送SQL语句,处理结果并显⽰,最后关闭连接。
但是不同的数据库对于同⼀个操作不论是协议还是参数都各有不同,如果让程序员⾃⼰去实现,那 就必须针对不同的数据库进⾏编码实现,这个⼯作量和维护成本显然太⼤。
Java采取的做法是把以上操作步骤定义了相应的接⼝,具体的实现交给数据库⼚商去做,Java程序 员只需要按照需要调⽤接⼝中定义的⽅法即可,这样不论使⽤什么数据库,都对于Java程序没有任 何影响,即便是换⼀个数据库,也只需要换⼀下相应⼚商的实现依赖。
JDBC使⽤过程可以概括为:加载数据库⼚商的驱动包、建⽴连接、创建Statement、执⾏SQL、 处理结果释放资源和关闭连接。
三.JDBC使用准备工作
1.创建Maven⼯程并配置国内镜像(调整下载环境)
原因:Maven是一个仓库,有着很多功能,目前了解配置镜像,它影响驱动包的下载(管理着依赖)
由于该仓库默认是国外的,由于国家防火墙等问题,可能导致驱动包下载失败,所以得配置国内镜像以确保驱动包的下载
过程:修改Maven配置文件,在settings.xml文件中修改<mirrors></mirrors>标签中的内容
IDEA自带的Maven配置文件路径:IDEA安装⽬录/plugins/maven/lib/maven3/conf/settings.xml
单独安装的Maven配置⽂件路径为:maven安装⽬录/conf/settings.xml
2.获取驱动包
在Maven仓库Maven Repository: Search/Browse/Explore搜索MySQL,找到自己对应版本驱动包
3.下载驱动包
作用:它类似于一个翻译官
-
Java程序:说的是“Java语言”(一种标准的、通用的数据库操作指令,即JDBC API)。
-
数据库(MySQL, Oracle等):说的是“方言”(每种数据库自己私有的、优化的通信协议和SQL语法)。
Java程序没法直接听懂MySQL的“方言”,反之亦然。这时,MySQL驱动包 就扮演了这个“翻译官”的角色。它站在两者中间,负责:
-
听:听懂Java程序发出的标准JDBC指令(如
connection.createStatement()
)。 -
翻译:将这些指令翻译成MySQL数据库能理解的特定协议和格式。
-
说:通过网络将翻译好的指令发送给MySQL数据库。
-
传话:再将数据库返回的结果(查询到的数据、成功/失败状态)翻译成Java程序能理解的格式,传回给程序。
没有这个“翻译官”,Java程序和数据库就无法沟通。
在⼯程中的 pom.xml 中的 <dependencies></dependencies> 标签中添加MySQL依赖,然后下载
四.总结
通过Maven来轻松地获取和管理数据库驱动包;这个驱动包在运行时实现了JDBC接口;你的Java程序则面向JDBC接口编程,从而能够以统一、标准的方式访问数据库,而无需关心底层细节。
五.JDBC的使用
1.使用驱动管理类DriverManager的静态方法来连接数据库
缺点:
会发生SQL注入,SQL注⼊即是指web应⽤程序对⽤⼾输⼊数据的合法性没有判断或过滤不严,攻击者可以在web应 ⽤程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现⾮法操 作,以此来实现欺骗数据库服务器执⾏⾮授权的任意查询,从⽽进⼀步得到相应的数据信息。
举例:
解决方案:使用 PreparedStatement 类(Statement的子类)中的 preparedStatement 方法,预编译SQL语句对象,SQL语句被预编译并存储在 PreparedStatement 对象中,可以使⽤该对象多次 执⾏SQL语句,同时可以解决SQL注⼊问题。
使用:
2.使用数据源DataSource数据源(常用)
使用原因:
DriverManager 每次调⽤ getConnection ⽅法都会初始化⼀个新的连接,使⽤完成后会关闭真实 连接,导致资源浪费。
DataSource使⽤了连接池的技术,会在初始化时创建⼀定数量的数据库连接,这些连接可以重 复使⽤,关闭时并不是真正关闭连接,⽽是将连接归还给连接池,以供后续使⽤,有效地提⾼ 资源利⽤率和和性能