1.❤️❤️前言~🥳🎉🎉🎉
Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。
如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。
当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区留言指正🗨️🗨️。让我们共同努力,一起进步!
加油,一起CHIN UP!💪💪
🔗个人主页:E绵绵的博客
📚所属专栏:1. JAVA知识点专栏
深入探索JAVA的核心概念与技术细节
2.JAVA题目练习
实战演练,巩固JAVA编程技能
3.c语言知识点专栏
揭示c语言的底层逻辑与高级特性
4.c语言题目练习
挑战自我,提升c语言编程能力
了解Mysql知识点,提升数据库管理能力
学习前端知识,更好的运用它
7. css3知识点专栏
在学习html5的基础上更加熟练运用前端
在学习html5和css3的基础上使我们的前端使用更高级
📘 持续更新中,敬请期待❤️❤️
2.JDBC概述
JDBC(Java Database Connectivity) 是Java提供的一套用于执行SQL语句的API,它定义了操作关系型数据库的标准接口。通过JDBC,开发者可以用统一的代码访问多种数据库(如MySQL、Oracle等),无需关心底层数据库的差异。
JDBC的核心组件:
-
驱动包:不同数据库厂商提供(如MySQL的
mysql-connector-java)。 -
API包:
java.sql.*和javax.sql.*,包含Connection、Statement、ResultSet等接口。
优势:
-
面向接口编程,与具体数据库解耦。
-
程序可移植性强,切换数据库仅需更换驱动包。
3.JDBC准备流程
-
下载对应数据库的驱动(如MySQL的
mysql-connector-java.jar)。一般都是去maven仓库中下载找到相对应的版本。
-
将驱动包添加到项目依赖中(如IDEA中通过
lib目录引入)。
-
将lib目录添加到库中(如下图)

4.JDBC 编程的基本流程
4.1创建数据源
DataSource dataSource = new MysqlDataSource(); //向上转型
//设置数据库所在的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource) dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("12345678");
//向下转型
DataSource 是一个接口。不能直接实例化,必须通过 它的实现类 MysqlDataSource 来实例化对象。
解析上面的代码。
(1) setURL 方法中的 URL 是什么?
URL:Uniform Resource Locator
URL 是网络服务程序上用于指定信息位置的表示方法,简单地说,就是网址。

ip地址:127.0.0.1, 这很特殊,叫做环回ip .因为当前数据库客户端(也就是现在写的jdbc代码), 数据库服务器(存储数据的服务器)都是在一个主机上,所以可以用环回ip (这ip针对于任何人都是固定一样的),如果它们装在不同主机上就不能用环回ip了.
(2) setUser 方法中的 root 是什么?
root 是 MySQL 管理员默认自带的管理员用户。
(3) setPassword 方法中,填的就是我们安装 MySQL 时设置的密码。
4.2代码和数据库之间建立连接
Connection connection = dataSource.getConnection();
选择 Connection 接口时,注意选择的是 java.sql 下的包

这里记得抛出异常,否则会编译错误(之所以要这样 请看作者写的java异常文章,它有解释)
4.3准备好sql语句
String sql = "insert into student values(18,'张三');"; PreparedStatement statement = connection.prepareStatement(sql);这个sql只是一个字符串的sql, 还不能被真正的执行. 所以还要进行预处理一下, 也就是下面的statement, 对我们的sql语句进行一个预编译:
PrepareStatement - > 提前预编译
这里的sql字符换服务器是可以处理的, 服务器首先需要对SQL进行解析, 理解这里的含义并执行, 但是如果客户端这里有几千万个sql字符串请求, 那么对于服务器来说压力就比较大.
上面的语句由于是固定的,没有变量,我们可不可以在语句里面加变量?
可以的,我们可以通过占位符的方式添加变量。
Scanner scanner = new Scanner(System.in); System.out.println("输入学号: "); int id = scanner.nextInt(); System.out.println("输入姓名: "); String name = scanner.next(); String sql = " insert into student values(?,?) " ; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1,id); statement.setString(2,name);
4.4执行sql
这里分为两种:
如果是 insert,update,delete 都是用 executeUpdate 方法
如果是 select,使用 executeQuery 方法
executeUpdate方法
int ret = statement.executeUpdate();
System.out.println(ret);
上面接收的返回值就表示当前这个操作,影响到了几行
executeQuery方法
对于查询来说, 返回的结果就不是int这么简单了, 而是一个ResultSet对象 .
ResultSet对象被称为结果集, 它象征着数据库中的一个临时表的身份, 代表着符合SQL查询语句的所有行, 并且提供一套完整的get方法来对这些记录进行访问. ResultSet里面的数据是一行一行排列的, 每行有多个属性(字段), 并且有一个记录指针, 指向行首数据.
String sql = "select * from student;"; PreparedStatement statement = connection.prepareStatement(sql); ResultSet resultSet = statement.executeQuery(); while(resultSet.next()) { int age = resultSet.getInt("age"); String name = resultSet.getString("name"); System.out.println("age = " + age + ", name = " + name); }分析 while 循环,这是一种固定写法。
针对结果集,我们依次获取到表中的每一行,再通过这一行来获取此行对应的列。第一次执行 resultSet.next(),表示获取到了第一行( id = 1 )
第二次执行 resultSet.next(),表示获取到了第二行( id = 2 )
第三次执行 resultSet.next(),由于表到达了末尾,next 方法返回了 false,循环结束。
4.5释放资源
这里的资源既然产出来了,那么肯定要释放回去。这里我们遵循 先创建的,后释放;后创建的,先释放。
statement.close(); connection.close();如果是选择语句的话要多加一个 resultSet.close()
4.6整体代码
以下为executeupdate的代码
public class test1 { public static void main(String[] args) throws SQLException { DataSource dataSource= new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/max?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("123"); Connection connection=dataSource.getConnection(); Scanner scanner=new Scanner(System.in); int age=scanner.nextInt(); String sql="insert into student value(null,'王五',?)"; PreparedStatement statement=connection.prepareStatement(sql); statement.setInt(1,age); int ret=statement.executeUpdate(); System.out.println("ret: " + ret); statement.close(); connection.close(); } }
以下为executeQuery的代码
public class test2 { public static void main(String[] args) throws SQLException { DataSource dataSource= new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/max?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("123"); Connection connection=dataSource.getConnection(); String sql="select * from student"; PreparedStatement statement=connection.prepareStatement(sql); ResultSet resultSet =statement.executeQuery(); while (resultSet.next()){ int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println( "id= " +id + ", name= " +name+",age="+age); } resultSet.close(); statement.close(); connection.close(); } }
5.总结
工作中一般不会直接使用jdibc.面试一般也不考 jdbc.
因为jdbc 这套 api 使用起来是比较繁琐的
因此有一些 大佬 把 jdbc 的 api 又进一步封装,成了一些操作数据库的框架(比如MyBatis, jpA),我们一般用这些框架去操作(后续框架会在javaEE中讲到)虽然不会用到它,但对于jdbc我们还是要了解的,它是这些框架的基础,只有了解基础才能更加熟悉掌握进阶知识。





3282

被折叠的 条评论
为什么被折叠?



