当前位置: 首页 > news >正文

数据库--JDBC编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是JDBC
  • 二、JDBC的使用
  • 代码实例
  • 总结


前言

前面我们都是在MySQL的编辑界面上敲代码,而这节课我们就要把SQL代码在我们的Idea上进行编写。废话不多说开始我们的旅程!


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是JDBC

实际开发中,SQL是很少手动输入的,绝大部分的SQL都是通过代码,自动执行的,这个时候就需要让其他编程语言(本节是使用Java)来操作数据库。
而MySQL是一个客户端/服务端架构的语言,根据MySQL提供API写个数据库客户端时非常容易的。
比如Oracle,SQLServer,SQLite等数据库都有API。
但是不同的数据库提供的API是不一样的,他们的开发团队不相同,所以API那么多,对于程序员的学习成本就越高,于是在Java的圈子里,就把这些API同一编程一套,指定成标准!就被称为JDBC。
目前JDBC这套API已经成了Java标准库的一部分,由于Java的影响力还是很大的,以自身作为标准,各种数据库厂商,都提供了能够适应JDBC相关的驱动包!
所以我们只需要掌握了JDBC这套API,无论操作哪个数据库,操作的代码都是不变的,基本相同。
即JDBC最主要的就是屏蔽了不同数据库原生API之间的差异,
而是使用了JDBC这一套API接口实现来规范了所有的数据库的编程操作。

二、JDBC的使用

JDBC这里的api看起来蛮多很复杂,但实际上都是固定套路,非常简单,多练就记住了。

- 描述数据库的连接和用户密码
在这里插入图片描述
这样一段代码,就设置好了数据库服务器连接,要操作的数据库用户和密码。
至于setURL这里面的字符串含义,我们下面也来一一解析:

**“jdbc:mysql”:**这个url是给jdbc中的MySQL
来使用的
**“127.0.0.1”:**服务器所在的IP地址,此处的IP时环回IP,表示主机自己。
**“3306”:**这个时端口号,MySQL安装时候配置的,默认时3306.
“javatest”::要访问的数据库名。
**“characterEncoding=utf8” :**描述了请求的字符编码方式,我的MySQL版本时8.0.33的,一般情况都是utf8
**“useSSL=false”:**关闭加密功能,这里不做展开介绍。

上述的内容,在后续讲述网络知识的时候,还会见到,这里只是简单的了解即可。

JDBC支持两种风格的代码,一种是DataSource,一种是DriverManger.

  • DataSource 相比于DriverManger内置了数据库连接池,可以重复利用连接
    (比如:线程池,字符串常量池……)
  • DriverManger使用的时候,需要借助反射,数据不常规的编程手段,博主文章中采用的是DataSource ,
    想要看DriverManger.我会在最后的代码总结时展示

- 于数据库建立连接
上述的操作,只是描述了数据库服务器在哪里,并没有真正建立起连接来,下面我们进行连接操作,才是真正开始通过网络去与数据库服务器进行通信。
在这里插入图片描述

- 构造SQL语句
在这里插入图片描述
通过connection.prepareStatement方法构造出一个对象,PreparedStatement类型的,其实这个对象背后做了很多事,比如会对SQL语句进行一些预处理……
上面的写法是直接写死了,如果是查询操作还好,那如果是要执行新增操作呢?也是直接写死吗?
更多的时候,插入的数据是动态的,,那要怎么写呢?可以使用PerparedStatement来通过占位符替换的方式,从而实现动态SQL的构造:
在这里插入图片描述

在这里插入图片描述

这里每个?的位置都是通过1开始计算的,setString(1,sn)就是将第一个?位置的数据插入成sn(学号),后面的以此类推。
构造出指定的SQL语句后,就可以通过statement这个引用来执行了。

- 执行SQL语句

在这里插入图片描述
excuteQuery执行后,会返回一个结果集,如果是excuteUpdate则返回这个操作影响的几行。

- 遍历结果集
在这里插入图片描述
在这里插入图片描述

- 断开连接
在这里插入图片描述
在这里插入图片描述

- 依次释放资源,关闭连接
在这里插入图片描述

JDBC 使用步骤总结:
1.创建DataSource ->描述了数据库服务器在哪里(url,user,password)
2.建立连接; dataSource.getConnection();
3.拼装SQL语句
Statement或者Preparement
4.执行SQL execute方法/executQuery/execuUpdate
5.遍历结果集合
ResultSet,迭代器遍历
6.依次释放,关闭资源
1)ResultSet,2)Statement,3)Connection

JDBC在实际工作中,可能并不会直接使用,上述的代码大家也能看到,写起来还是比较麻烦的,因此就有了一些库和框架,针对JDBC进行了进一步的封装,让我们使用起来更方便,比如后续会学习到的Mybatis这种……

代码实例

//这是DataSourcepublic static void main(String[] args) {//1.定义MySQL数据源对象MysqlDataSource mysqlDataSource = new MysqlDataSource();//设置数据库连接mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/javatest?characterEncoding=utf8" +"&allowPublicKeyRetrieval=true&useSSL=false");//用户名mysqlDataSource.setUser("root");//密码mysqlDataSource.setPassword("Wm127369#");//定义JDBC的数据源对象DataSource dataSource = mysqlDataSource;//定义连接对象Connection connection = null;//定义预处理SQL执行对象PreparedStatement statement = null;//定义结果集ResultSet resultSet = null;try {//1通过数据源获取数据库连接connection = dataSource.getConnection();//2.获取预处理SQL执行对象//定义要执行的SQLString sql = "select student_id,sn,name,mail,class_id from student where name = ?";statement = connection.prepareStatement(sql);//接收用户的输入System.out.println("请输入学生的姓名:");Scanner scanner = new Scanner(System.in);String name = scanner.next();//3.用真实值替换占位符statement.setString(1,name);//4.执行SQL,获取结果集resultSet = statement.executeQuery();//5.遍历结果集while (resultSet.next()){long stuId = resultSet.getLong("student_id");String stuSn = resultSet.getString(2);String stuName = resultSet.getString(3);String stuMail = resultSet.getString(4);long classId = resultSet.getLong(5);System.out.println(MessageFormat.format("学生编号 = {0},学号 = {1},学生姓名{2},邮箱 = {3},班级编号 = {4}",stuId,stuSn,stuName,stuMail,classId));}}catch (SQLException e){e.printStackTrace();}finally {//依次释放资源,关闭连接if (resultSet !=null){try {resultSet.close();}catch ( SQLException e){e.printStackTrace();}}if (statement !=null){try {statement.close();}catch ( SQLException e){e.printStackTrace();}}if (connection !=null){try {connection.close();}catch ( SQLException e){e.printStackTrace();}}}}//这是DriverManagerpublic static void main(String[] args) {Connection connection = null;Statement statement = null;ResultSet resultSet =null;try {//1.加载数据库厂商提供的驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.获取数据库连接connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java113?characterEncoding=utf8" +"&allowPublicKeyRetrieval=true&useSSL=false", "root", "Wm127369#");//3.创建Statement对象statement = connection.createStatement();//4.定义SQL并执行SQL语句System.out.println("请输入学生姓名:");Scanner scanner = new Scanner(System.in);//接收用户输入String name = scanner.next();String sql = "select id,name,chinese,math,english from exam where name ='"+name + "'";statement.executeQuery(sql);//5.执行SQL,获取查询结果resultSet = statement.executeQuery(sql);//6.对结果进行遍历,获取结果集while (resultSet.next()){long stuId = resultSet.getLong(1);String stuName = resultSet.getString(2);float stuChinese = resultSet.getFloat(3);float stuMath = resultSet.getFloat(4);float stuEnglish = resultSet.getFloat(5);System.out.println(MessageFormat.format("学生编号={0},学生姓名 = {1}, 语文成绩 = {2},数学成绩 = {3},英语成绩 = {4}",stuId,stuName,stuChinese,stuMath,stuEnglish));}}catch (SQLException e){e.printStackTrace();} catch (ClassNotFoundException e) {throw new RuntimeException(e);}finally {//依次释放资源,关闭连接if (resultSet !=null){try {resultSet.close();}catch (SQLException e){e.printStackTrace();}}if (statement !=null){try {statement.close();}catch (SQLException e){e.printStackTrace();}}if ( connection !=null){try{connection.close();}catch (SQLException e){e.printStackTrace();}}}}

总结

其实JDBC并不难,就是几个固定的套路,如果是应付考试,还是需要直接多建几个表利用JDBC使用一些复杂查询,多练习练习,如果是工作中,用JDBC就不多了,会使用更方便的框架,如果你是一个很有想法的同学,可以基于JDBC进行修改,搭建一套属于直接的框架来……
MySQL数据库基础就此结束!

http://www.dtcms.com/a/539952.html

相关文章:

  • 开源一个基于OpenCV的模糊检测工具,支持局部分析和视频处理
  • 政协网站建设情况汇报为什么wordpress安装成了英文版
  • 不做网站只做推广可以么襄阳网站建设首选公司哪家好
  • 10月28日
  • 【加精】C# XML差异对比 (直接用)
  • JavaScript eval函数
  • C++笔记(面向对象)对象和对象之间关系
  • 注册中心 eureka、nacos、consul、zookeeper、redis对比
  • c# 基于xml文件和devexpress插件 的工作流程配置
  • 【四川政务服务网-注册安全分析报告】
  • 基于海思AI ISP视频编解码IPC平台的算法承载方案
  • C语言入门(十二):函数的递归
  • 建设银行的网站模板下载免费网站
  • 小型企业网站设计教程app软件开发技术pdf百度云
  • uniapp安卓端+ fastapi(后端)获取到设备的ip
  • hardhat 搭建智能合约
  • 【开题答辩实录分享】以《智慧校园勤工俭学信息管理系统的设计与实现》为例进行答辩实录分享
  • Elasticsearch安装与配置全指南
  • BIM引擎中火焰模拟
  • SPI NOR Flash 家族的常见存储结构
  • billu_b0x 靶机渗透测试
  • RPA 如何成为 AI 智能体的落地引擎
  • 快递比价寄件系统技术解析:基于PHP+Vue+小程序的高效聚合配送解决方案
  • 巢湖市重点工程建设管理局网站易企秀网站怎么做轮播图
  • 免费画图网站微信公众官网登录入口
  • SAP SD借贷项凭证创建接口分享
  • uniapp(2)自定义tabbar
  • 技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • 【Linux】编辑器vim的使用和理解gcc编译器
  • uniapp如何集成第三方库