声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
什么是jdbc,Java连接数据库的API。Jdbc全称:Java DataBase Connection Java数据库连接。什么叫Java数据库连接API呢?
因为jdbc是Java连接数据库的规范制定,jdbc是规范。而实现类则由各数据库厂商来支持。来实现jdbc API。将麻烦的事情交给数据库厂商去完成。
所以jdbc是规范,不是实现。是Java连接数据库的规范。每个数据库都不一样,就需要找每个即熟悉自己的数据库,又熟悉Java的人。所以这项工作由自己来做就太麻烦了。
这jdbc API有聚集哪些功能呢?这些功能都聚集在一个个的接口上。我们不操作数据库厂商的直接的实现子类,而是由接口去获得操作对象去,方法什么的都在接口上。我们调用接口
有哪些接口呢?
1:驱动管理员->创建->
2:连接对象->创建
3:[SQL执行对象,预处理执行对象,存储过程调用对象] ->含有
4:记录集对象,记录集结构对象
代码:
找数据库驱动,搜索对应的jar包,jar包是连接数据库的驱动
驱动包已经找到了
通过driveMangger创建连接对象:
driveMangger.getConnection获得数据库连接对象
驱动管理员是管理驱动包的,我们已经找到驱动包了,我们找管理员要连接对象。管理员与驱动之间如何洽谈的我们不关心。
管理员得到连接对象,管理员就需要与驱动对话,驱动要求要有参数:URL,user,password
User与password是拿去连接数据库的身份验证,而URL是告诉驱动你的连接目标在哪里
而URL包含3个部分:协议,ip+port,库名字
协议是告诉驱动管理员,我要加载这个数据库驱动,协议的规范是jdbc:驱动命名。最后驱动管理员会找到MySQL的驱动类,因为我们引入jar包了。如果这个名字我们乱填,驱动找不到,会报错说找不到驱动。
剩下的参数连接是数据库的要求参数了,连接对象,身份验证。3个参数,分成2个部分,一个是告诉驱动管理员去加载哪个驱动。一个是告诉驱动带着参数连接到指定目标。
在满足有驱动包的情况下,从驱动管理员获得数据库连接对象。驱动管理员根据URL的协议找到驱动包,驱动包连接数据库。因为实现类都在驱动身上。Jdbc是规范。
拿到了连接对象,就等于是得到了Java与数据库的连接对象,这个连接对象可以帮我们去执行SQL语句。
执行SQL:
拼接SQL语句,从Connection创建出Statement对象,Statement是负责执行处理SQL语句的。SQL语句分2类,更新语句与查询语句,更新语句包括update,insert,delete
返回int影响的执行行数:
记录已经被插入到数据库之中
不用了关闭连接对象,jdbc的实现者,一般是采用tcp不断开的安全的传输连接。连接比较耗时,并且也会占系统资源。所以不用了要关闭连接对象。
Jdbc Java数据库连接规范,Java出规范,厂商做实现,我们只需要掌握指定规范的接口即可。实现类由厂商去实现。我们不需要也不用直接操作实现类,由接口获得实现类的接口并操作。
在以前,我们在操作driveMangger驱动管理员对象时,还需要先加一句话,Class.forName(“com.mysql.jdbc.Drive”)我们需要先加载这个drive类
当我们加载哪个类时,这个类中有一个静态块,当我们去触碰这个静态块时,drive就将自己的驱动注册到driveMangger之中。我们在从driveMangger拿连接对象
可以不使用forName,可以实例化可以调用成员,只要触碰到类,则第一次加载静态块,将自己注册到驱动管理员之中。我们找驱动管理员时,驱动管理员就根据URL的协议与自己容器中的驱动类做比较,假设协议jdbc:mysql,我们forname加载mysql的drive,则驱动管理员根据协议找到自己容器中的MySQLDrive,找到了我们就能操作了。
过程是这样的,我们加载drive,drive静态块将自己注册到驱动管理员中,驱动管理员根据协议与自己容器中的驱动类去判断有没有你要连接的驱动类。如果有则可以操作了,没有就报错没有找到这个驱动。
现在不需要写forname了,直接就自己自动挂载到驱动管理员之中了。
打开jar包,找到meta-inf包,找到service服务包,里面有个driver说明,里面记录了驱动drive类。当我们运行工程时,就自己将这个类加载起来了,不需要我们在手动加载了。驱动已经可以自动加载在类上了。
Java连接MySQL数据,还可以这样写:
Jdbc:mysql:///库、中间/表示本地地址与3306默认端口
Jdbc:mysql:localhost:3306/库
jdbc:mysql:localhost:3306/库?characterEncoding=utf-8还可以传递参数
当然MySQL支持这种写法,不表示所有数据库连接驱动都支持,每个驱动可能实现都不一样