JDBC简介
(一)JDBC是什么?
相对于数据库而言,Web应用是数据库的客户端,我们需要为客户端与数据库之间建立连接,双方才能交互。
我们已经学习了SQL,这是操纵数据库的语言。我们现在开发Web应用使用的Java语言,那怎么让Web应用于数据库进行交互呢?这就需要使用JDBC了。
JDBC是Java Database Connectivity的缩写,是标准的Java API,是一套客户端程序与数据库交互的规范。JDBC提供了一套通过Java操纵数据库的完整接口。、
(二)JDBC驱动
JDBC API的实现,是由JDBC驱动程序实现的,不同的数据库对应有不同的驱动程序。需要使用某个具体的JDBC驱动,我们需要将其对应的Jar包引入到项目中。
JDBC 目标是做到“一次编写,到处运行”,当你使用JDBC API 访问数据库后,无论是更换数据库还是更换操作系统,都不需要修改代码。所以使用JDBC,我们可以使用相同的API访问不同的数据库服务(比如MySQL 和Oracle等),这样就编写不依赖于具体数据库的Java程序。更高层的数据访问框架也是以JDBC为基础构建的。
(三)数据库连接池
在博客应用中,一次Web请求一般对应于一次对博客数据的增删改查,每一次建立数据库连接才能完成。创建数据库连接是一件耗时的事情,而且占用系统资源。对于访问量比较大的应用,频繁打开喝关闭数据库连接就会严重影响性能。而且数据库连接的数量如果不控制起来,系统资源可能无限制地被占用,最终可能导致内存泄漏,服务器崩溃。
为了解决这个问题,我们一般采用数据库连接池技术。其基本思想就是为数据库连接建立一个缓冲池,预先放入一定数量的连接,当需要使用时直接从缓冲池中取出即可使用,使用完了重新放回缓冲池。我们还可以通过设定连接池最大连接数来防止超过系统负载的数据库连接数量,这样能极大地提高系统的性能和稳定性。
(四)JDBC使用
1.IDEA导入 jar 包
2.开发步骤
// 数据库连接对象 private Connection conn = null;//与特定数据库的连接(会话)。 // 操作句柄[执行SQL语句] private Statement stat = null;//用于执行静态SQL语句并返回其生成的结果的对象。 // 结果集对象[获取查询的结果] private ResultSet rs = null;//表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 // 连接相关的字符串对象 String url = "jdbc:mysql://localhost:3306/要连接的数据库名字?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"; //url - 格式为 jdbc:subprotocol:subname的数据库URL String username = "root"; String password = "你自己的root的密码"; // 通过反射机制讲jdbc的驱动jar包 动态的加载到JVM static { try { Class.forName("com.mysql.cj.jdbc.Driver"); //forName() 返回与带有给定字符串名的类或接口相关联的 Class 对象 } catch (ClassNotFoundException e) {//找不到具有指定名称的类的定义。 e.printStackTrace(); } }
(1)加载数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
注:这里驱动的名字要和数据库的版本对应。
Mysql5版本:
Class.forName("com.mysql.jdbc.Driver");
Mysql8版本:
Class.forName("com.mysql.cj.jdbc.Driver");
那么Class.forName()有什么作用呢?
首先我们知道Class.forName() 方法要求JVM查找并加载指定的类到内存中,若将"com.mysql.jdbc.Driver" 当做参数传入,就是告诉JVM,去"com.mysql.jdbc"这个路径下找Driver类,将其加载到内存中。
那么Class.forName("com.mysql.cj.jdbc.Driver")做了什么呢?
下面是mysql-connector-java 8.0.17
的源码,可以看出Driver
在static
方法中完成了驱动注册DriverManager.registerDriver(new Driver());
package com.mysql.cj.jdbc; import java.sql.DriverManager; import java.sql.SQLException; public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { } static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } }
果我们在代码中将Class.forName("com.mysql.cj.jdbc.Driver");
替换为DriverManager.registerDriver(new Driver());
,实现功能是一样的:
Class.forName("com.mysql.cj.jdbc.Driver");
等效于
DriverManager.deregisterDriver(new Driver());
(2)创建数据库的连接
// 2. 获得数据库连接 String url = "jdbc:mysql://localhost:3306/course_price"; String user = "root"; String password = "12345678"; Connection conn = DriverManager.getConnection(url, user, password);
创建数据库的连接需要三个参数
url,user,password
要想连接数据库,第一需要知道数据库是什么类型的数据库,第二需要知道连接的数据库名称。所以 url 的格式:
jdbc:数据库类型://localhost:3306/数据库名称
URL=jdbc:mysql://[host][:port]/[database]
其后可以添加性能参数:?[propertyName1=propertyValue1] & [propertyName2]=propertyValue2] …
有了 url,还需要知道数据库的账号密码。所以有了这三个参数,就能通过 java 程序连接数据库了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了