Java最全快速学会使用JDBC+原理的全面详解(一),springmvc源码分析图

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

JDBC(Java Data Base Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。**总结而言,JDBC就是Java用于执行SQL语句实现数据库操作的API。**它就是JAVA与数据库连接的桥梁或者插件,用JAVA代码就能操作数据库的增删改查、存储过程、事务等。

1.2 JDBC的作用

用JAVA就能连接到数据库;创建SQL或者MYSQL语句;执行SQL或MYSQL的查询数据库;查看和修改数据库中的数据记录。

1.3 工作原理图

jdbc工作原理图(来自百度)

数据库是由不同生产产商决定的,例如Mysql、Oracle、SQL Server,而如果JAVA 如何对不同数据库的实现管理和操作?为了更便捷和灵活地使用高级语言直接对数据库进行管理,JDBC因此而产生,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun公司定义一组接口,由数据库厂商来具体实现。

如上图所示,我们工作人员编写应用程序(application),通过不同的数据库产商对Sun公司定义的JDBC驱动接口的具体实现类(数据库驱动),来实现对数据库的操作。

二、JDBC程序的编写步骤


2. 1 具体步骤

(1) 注册驱动

JDBC类库向DriverManager注册数据库驱动·

(2)建立连接(url、username、password)

使用DriverManager提供的getConnection()方法连接到数据库

(3)创建SQL语句,获取语句执行对象

编写SQL语句,并建立SQL语句执行对象

(4)执行语句

执行SQL语句,并将结果集合返回到ResultSet中

(5)处理结果

(6)释放资源(注意关闭的顺序)

2.2 代码案例

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

static void test() throws SQLException, ClassNotFoundException {

//1.注册驱动

//方式一

// DriverManager.registerDriver(new com.mysql.jdbc.Driver());

//方式二:多个驱动的话用冒号:隔开

// System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);

//方式三:推荐方式

Class.forName(“com.mysql.jdbc.Driver”);

//2.建立连接

String url=“jdbc:mysql://localhost:3306/jdbc”;//url格式:jdbc:子协议:子名称//主机名:端口/数据库名称

String name=“root”;

String password=“mysql”;

Connection conn=DriverManager.getConnection(url,name,password);

//3.创建SQL语句,,并建立SQL语句执行对象

sql=“select * from user”;//创建SQL语句

Statement st=conn.createStatement();//SQL语句执行对象

//4.执行语句

ResultSet rs=st.executeQuery(sql);

//5.处理结果

while(rs.next()) {//按行遍历

System.out.println(rs.getObject(1)+“\t”+rs.getObject(2)+“\t”

+rs.getObject(3)+“\t”+rs.getObject(4)+“\t”);//获取每一列

}

//6.释放资源(后创建的先关闭)

rs.close();

st.close();

conn.close();

}

2.3 步骤详解

(1)注册驱动

2.2中的程序注册驱动一步给出了三种方式,Class.forName(),是最常见的注册JDBC驱动程序的方法,注册某数据库就将该数据库驱动的名称以字符串的形式作为参数。不同的数据库具有不同的但是固定的驱动名称。2.2中的案例是以MySQL数据库为例,驱动名称为:com.mysql.jdbc.Driver

其他数据库对应的驱动名称如下:

数据库驱动名称和URL格式

以MySQL数据库为例,注册驱动的代码如下:

Class.forName(“com.mysql.jdbc.Driver”);

(2)建立连接(url、username、password)

注册驱动以后就需要和数据库建立连接。可以使用 DriverManager.getConnection()方法建立连接。根据传入参数的不同,有三种重载的DriverManager.getConnection()方法,最常用的方式是传入是三个参数:

getConnection(String url, String user, String password)

第一个参数url是指向数据库的地址,不同的数据库有不同的格式如上图所示。以MySQL为例,

url的格式为:jdbc:子协议:子名称//主机名:端口/数据库名称

子协议为mysql;不存在子名称;主机名和端口号一般默认为localHost:3306;还需要datebaseName数据库名,假设为jdbc;那么,url为:String url="jdbc:mysql://localhost:3306/jdbc"

第二、三个参数分别是数据库的用户名和密码。得到数据库的地址,用户名和密码才能与其建立连接。

建立连接的代码为:

String url=“jdbc:mysql://localhost:3306/jdbc”;

String name=“root”;

String password=“mysql”;

Connection conn=DriverManager.getConnection(url,name,password);

(3)创建SQL语句,获取语句执行对象

创建SQL语句就是以字符串的形式编写操作数据库的语言。在2.2案例中对应的代码为:sql="select * from user";

(3).1 Statement和PreparedStatement都可以创建执行对象

SQL语句的执行对象说有Statement和PreparedStatement两个,但我们一般都使用PreparedStatement。两者的描述如下:

Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句,即静态SQL语句。

如何获取执行对象?通过使用Connection对象的createStatement()方法创建指定对象:Statement st=conn.createStatement();

PreparedStatement 继承于Statement。实例包含已编译的 SQL 语句,这就是使语句预编译。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX() 方法来提供。

如何获取执行对象?通过使用Connection对象的PreparedStatement()方法创建指定对象:

PreparedStatement ps=conn.prepareStatement(sql);

(3).2 Statement和PreparedStatement的区别

两者在使用上具有一定的区别,主要集中在第(3)步:创建SQL语句,获取语句执行对象和第(4)步:执行语句

使用Statement的代码为(只展示第(3)步和第(4)步):

//3.创建SQL语句,,并建立SQL语句执行对象

sql=“select * from user”;//创建SQL语句

Statement st=conn.createStatement();//SQL语句执行对象

//4.执行语句

ResultSet rs=st.executeQuery(sql);

/

使用PreparedStatement的代码为(只展示第(3)步和第(4)步):

//3.创建语句

//PreparedStatement可以对sql语句进行预处理,过滤一些MySQL中的字符

String sql=“select * from user where name=?”;/使用PreparedStatement,sql语句中可以存在占位符"?"

PreparedStatement ps=conn.prepareStatement(sql);//区别于使用Statement,需要将sql语句传入进行预编译

ps.setString(1, “zhangsan”);//这句代码是对上面sql语句中的第1个问号进行设置,下面(3).2讲解

//4.执行语句

rs=ps.executeQuery();//区别于使用Statement,不需要将sql语句作为参数传入

注意:使用Statement的话,需要在第(4)步将sql语句交给Statement的executeQuery()或executeUpdate()方法来执行;而使用PreparedStatement的话,由于其具有预编译的功能,在第(3)步创建PreparedStatement 对象的时候就需要将sql语句传入进行预编译,到第(4)步调用executeQuery()或executeUpdate()方法来执行sql语句的时候就不需要将sql语句传入,如果传入会报错。

(3).2 PreparedStatement相比于Statement的优势
优势一:

Statement执行不带参数的简单SQL语句,即静态SQL语句。PreparedStatement可执行动态执行SQL语句,使用占位符?去代替未知数据,因而一个句子可以执行多种不同的SQL,而Statement需要重新书写SQL语句,笨重。

案例:

使用Statement查询user表里面名字为"zhangsan"的人所有信息:

//3.创建SQL语句,,并建立SQL语句执行对象

sql=“select * from user where name = zhangsan”;//创建SQL语句

Statement st=conn.createStatement();//SQL语句执行对象

//4.执行语句

ResultSet rs=st.executeQuery(sql);

/

使用PreparedStatement查询user表里面名字为"zhangsan"的人所有信息:

//3.创建语句

String sql=“select * from user where name=?”;/使用PreparedStatement,sql语句中可以存在占位符"?"

PreparedStatement ps=conn.prepareStatement(sql);//区别于使用Statement,需要将sql语句传入进行预编译

ps.setString(1, “zhangsan”);//这句代码是对上面sql语句中的第1个问号进行设置,下面讲解

//4.执行语句

rs=ps.executeQuery();//区别于使用Statement,不需要将sql语句作为参数传入

注意:

使用PreparedStatement,可以使用占位符"?"表示 SQL 语句创建时未被指定的部分,每个问号的值必须在该语句执行之前,通过适当的setXXX() 方法来指定。XXX表示相应的参数类型,如上例中的 "zhangsan"为String类型,故使用setString()方法。该方法包含两个参数,第一个参数表示第几个问号,第二个表示问号表示的内容。

案例:

最后

金三银四到了,送上一个小福利!

image.png

image.png

专题+大厂.jpg

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

问号,第二个表示问号表示的内容。

案例:

最后

金三银四到了,送上一个小福利!

[外链图片转存中…(img-z5LHGioX-1715347281886)]

[外链图片转存中…(img-R0K4kmFz-1715347281886)]

[外链图片转存中…(img-fzSv6lja-1715347281887)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值