Javaweb08-JDBC数据库连接技术

JDBC数据库连接技术

**原理:**JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,需要通过不同数据库驱动与不同的数据库进行连接,连接后即可对数据库进行相应的操作。

image-20240617165440625

一.Jdbc API

1.Driver接口

**作用:**Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。

2.DriverManager类

**作用:**DriverManager类用于加载JDBC驱动并且创建与数据库的连接。

  • 注册驱动

方法一:

方法名称功能描述
registerDriver(Driver driver)该方法用于向DriverManager中注册给定的JDBC驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
此方式会使数据库驱动被注册两次。这是因为Driver类的源码,已经在静态代码块中完成了数据库驱动的注册。所以,为了避免数据库驱动被重复注册,需要在程序中使用Class.forName()方法加载驱动

方法二:

Class.forName("com.mysql.jdbc.Driver")
//注意:MySQL 5.6以及之后的版本需要更新到新版驱动,使用Class.forName("com.mysql.cj.jdbc.Driver")方式加载驱动类
  • 获取数据库连接对象
方法名称功能描述
getConnection(String url,String user,String pwd)该方法用于建立和数据库的连接,并返回表示连接的Connection对象
//注意:
url:表示要连接的数据库的url
连接本地mysql的url:
jdbc:mysql://localhost:3306/数据库名
jdbc:mysql://127.0.0.1:3306/数据库名    
jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=GMT%2B8    
user:是数据库的用户名
pwd:是数据库的密码

3.Connection接口

  • 事务管理(Connection接口定义了三个对应的方法)
开启事务:setAutoCommit(boolen) ture:自动提交 false:手动
提交事务:commit()
回滚事务:rollback()

Connection conn=DriverManager.getConnection(String url,String user,String password)
    
try{
	conn.setAutoCommit(false);
	操作mysql;
	conn.commit();
}catch(exception e){
	conn.rollback();
}
  • 获取Statement对象
方法名称功能描述
createStatement()创建一个Statement对象,并将此SQL语句发送到数据库
prepareStatement(String sql)创建一个PreparedStatement对象,并将带参数的SQL语句发送到数据库
prepareCall(String sql)创建一个CallableStatement对象调用数据库存储过程

4.Statement接口

**作用:**Statement接口用于执行静态的SQL语句,并返回一个结果对象。利用Statement接口把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果。

方法名称功能描述
execute(String sql)用于执行各种SQL语句,该方法返回一个boolean类型的值,如果为true,表示所执行的SQL语句有查询结果,可通过Statement的getResultSet()方法获得查询结果
executeUpdate(String sql)用于执行SQL中的insert、update和delete语句。该方法返回一个int类型的值,表示数据库中受该SQL语句影响的记录条数 。执行DDL或DML语句,DML语句影响的行数0表示执行成功;DDL返回0
executeQuery(String sql)用于执行SQL中的select语句,该方法返回一个表示查询结果的ResultSet对象

5.PreparedStatement接口

**作用:**PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。PreparedStatement接口扩展了带有参数的SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符“?”代替参数,然后通过setter()方法为SQL语句的参数赋值

  • 执行带参数的Sql语句
方法名称功能描述
executeUpdate()在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句或者DDL
executeQuery()在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象
  • 给参数赋值
方法名称功能描述
setInt(int parameterIndex, int x)将指定参数设置为给定的int值
setFloat(int parameterIndex, float x)将指定参数设置为给定的float值
setString(int parameterIndex, String x)将指定参数设置为给定的String值
setDate(int parameterIndex, java.sql.Date x)将指定参数设置为给定的Date值
addBatch()将一组参数添加到此PreparedStatement对象的批处理命令中
setCharacterStream(int parameterIndex, java.io.Reader reader,int length)将指定的输入流写入数据库的文本字段
setBinaryStream(int parameterIndex, java.io.InputStream x, int length)将二进制的输入流数据写入到二进制字段中
//preparedStatement预编译的功能
PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在PreparedStatement对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大提高了数据的访问效率。
//对于自增属性id无需插入
String sql1 = "INSERT INTO dept(name) VALUES(?)";
preparedStatement = conn.prepareStatement(sql1);
preparedStatement.setString(1, "软件工程");
int i = preparedStatement.executeUpdate();
if (i > 0) System.out.println("插入成功");
else System.out.println("插入失败");

6.ResultSet接口

**作用:**ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标(指针),ResultSet对象初始化时,游标在表格的第一行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。

  • 通过索引或字段获取参数
方法名称功能描述
getString(int columnIndex)用于获取指定字段的String类型的值,参数columnIndex代表字段的索引
getString(String columnName)用于获取指定字段的String类型的值,参数columnName代表字段的名称
getInt(int columnIndex)用于获取指定字段的int类型的值,参数columnIndex代表字段的索引
getInt(String columnName)用于获取指定字段的int类型的值,参数columnName代表字段的名称
getDate(int columnIndex)用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引
getDate(String columnName)用于获取指定字段的Date类型的值,参数columnName代表字段的名称
//注意:
通过索引获取值时,索引从1开始
  • 通过指针指向表格位置
方法名称功能描述
next()将游标从当前位置向下移一行
absolute(int row)将游标移动到此 ResultSet 对象的指定行
afterLast()将游标移动到此 ResultSet 对象的末尾,即最后一行之后
beforeFirst()将游标移动到此 ResultSet 对象的开头,即第一行之前
previous()将游标移动到此 ResultSet 对象的上一行
last()将游标移动到此 ResultSet 对象的最后一行
//注意:
ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量
    
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery(sql);
rs.absolute(2);  
//在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”表示以只读形式打开结果集。

二.Jdbc快速入门案例

  • 导入mysql-connector-java-8.0.31.jar包(要保持与mysql相同的版本)

  • 通过反射注册驱动,使得JDK可以识别相应的jar包

  • 获取JDBC对数据库的连接(DriverManager.getConnection(String url, String username, String password))

  • 定义SQL语句

  • 获取执行SQL对象(connection.createStatement())

  • 执行SQL语句(statement.execute())

  • 处理返回结果

  • 释放资源(close)

0.创建工程导入驱动jar包

1.注册驱动#识别jar包 
Calss.forName("com.mysql.cj.jdbc.Driver");

2.获取连接
Connection conn=DriverManager.getConnection
            (String url,String user,String password);
            
3.定义SQL语句
String sql=" ";

4.获取执行SQL对象
Statement stmt=conn.createStatement();

5.执行SQL
int count=stmt.executeUpdate(sql);//返回受影响行数

6.处理返回结果

7.释放资源
stmt.close();
conn.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/717272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于It扩散过程的交易策略偏微分方程,提出了一种确定It扩散过程。通过根据的第一次通过时间来确定问题在这个过程中,我们推导出交易长度的分布函数和密…

Guava-EventBus 源码解析

EventBus 采用发布订阅者模式的实现方式,它实现了泛化的注册方法以及泛化的方法调用,另外还考虑到了多线程的问题,对多线程使用时做了一些优化,观察者模式都比较熟悉,这里会简单介绍一下,重点介绍的是如何泛化的进行方法的注册以及…

网线不通?瞅瞅这里----关于交叉网线的原理。

最近搞了个项目,UDP对接UDP,死活对接不上。 最后发现是交叉网线的事情,在此记录交叉网线的原理。 先说结论:不同设备用直连,相同设备用交叉网线 细说说 1.原理 网线的原理实际就是TX与RX对接。 正常一个设备同时有…

关于使用命令行打开wps word文件

前言 在学习python-docx时,想在完成运行时使用命令行打开生成的docx文件。 总结 在经过尝试后,得出以下代码: commandrstart "C:\Users\86136\AppData\Local\Kingsoft\WPS Office\12.1.0.16929\office6\wps.exe" "./result…

智能室内空气质量监测预警系统小程序设计说明书

智能室内空气质量监测预警系统小程序设计说明书 一、应用功能与系统设计 (一) 应用功能 该小程序设计的目的是为了配合环境监测吸顶灯,Mini空气监测仪等硬件设备实时数据展示与远程设备控制等功能,系统框架图如图1-1所示。用户可以从小程序…

生活好物:日常更精彩

我们的日用杂货店,是生活美学的聚集地。这里汇聚了各式各样的生活用品,每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店,仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆,到浴室的洗漱用品,再到客厅的…

Excel和Word等工具小技能分享汇编(一)

这里汇集刘小生前期微信公众号分享的Excel和Word等工具小技能,为方便大家查看学习,刘小生对其进行分类整理,后期也会不定期整理更新,如有想学习交流或其他小技巧需求,欢迎留言,我们一起学习进步&#xff01…

免费 逼真:快手“可灵”后又一Sora级选手登场

就在今日,英伟达投资的旧金山初创公司 Luma AI 打出一手王牌,推出新一代 AI 视频生成模型 Dream Machine,可以文生视频,图生视频,人人免费可用。同时,Luma AI 称 Dream Machine 可以从文本和图像生成“高质…

【会议征稿】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办,第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学…

【SXF2024笔试】

编程题 1. 最长不重复子数组2. 编辑任务所需的最短时间3. 主机连通所需的最短跳数4. 十进制数字的汉诺塔编码 1. 最长不重复子数组 2. 编辑任务所需的最短时间 3. 主机连通所需的最短跳数 4. 十进制数字的汉诺塔编码

STM32在进入main函数之前的准备工作

在大部分嵌入式系统中,在进入main函数之前都需要执行一个系统 初始化序列。这里所说的初始化序列特指的是软件运行环境的初始化。 上图是系统开始运行后,在进入main函数之前的默认初始化序列。从图中可以看出,在左侧有2个函数:__m…

各大APP自动化运行插件开发需要用到的源代码有哪些?

在当今数字化时代,自动化运行插件的开发在各大APP中扮演着至关重要的角色,这些插件不仅提升了APP的功能性和效率,同时也为用户带来了更加便捷的使用体验。 在开发这些自动化运行插件的过程中,源代码的选择与使用显得尤为关键&…

RocketMQ快速入门:集成java客户端实现各类消息发送|异步、同步、顺序、单向、延迟、事务(五)附带源码

0. 引言 前面的章节中,我们已经针对rocketmq的基本概念和消息发送、消费流程进行了讲解,但实际在开发中如何实现rocketmq的接入、实现消息发送、消费还没有落实,那么今天,我们继续来学习如何基于java client集成rocketMQ 1. 集成…

Vue47-修改默认配置webpack.config.js文件

main.js是脚手架项目的入口文件,系统运行时,默认去找src下的main.js文件。这是webpack通过配置文件:webpack.config.js配置的。 脚手架把所有重要的配置文件都隐藏了,方式被开发者修改。 一、查看被隐藏的webpack配置 1-1、webpa…

python基础语法 002 - 3 数据运算

1 运算符 1.1 算术运算符 -*/ 1.1.1 除法:会类型转换、被除数不能为0 #算术运算符a 1 2 print(a) b a - 1 print(b) c b 6 print(c)# 为什么除法得不到整数? #除法可能遇到除不尽 #使用了除法数据类型会转化为浮点数 d c / 2 print(d) print(typ…

SAP 在过账的时候系统提示:被合并的公司 XXXX 和 ‘ ‘ 是不同的解决办法

最近用户反馈在STO的业务模式中交货单过账的时候,报错没有办法过账。查看了一下报错的信息提示:被合并的公司 和1300是不同的 如下图所示: 消息号是F5080 首先根据SAP的消息号找了一下NOTE,发现2091823有详细的说。 主要是财务…

硕士毕业论文《基于磁纹理的磁化动力学研究》

前言 本文是博主的硕士毕业论文,应该也是“自旋电子学(微磁学)”博客专栏的最后一篇博客,该毕业论文预设排版的PDF版本见下载链接:https://download.csdn.net/download/qq_43572058/89447526。若该博客专栏对读者您的…

Linux:生产消费模型 读者写者模型

Linux:生产消费模型 & 读者写者模型 生产消费模型阻塞队列基本结构构造与析构投放任务获取任务总代码 POSIX 信号量基本概念接口 环形队列基本结构构造与析构投放任务获取任务总代码 读者写者模型读写锁 生产消费模型 生产消费模型是一种用于处理多线程之间任务…

「6.18福利」精选大厂真题|笔试刷题陪伴|明天正式开屋啦 - 打卡赢价值288元丰厚奖励

🍰关于清隆学长 大家好,我是清隆,拥有ACM区域赛 银牌🥈,CCCC天梯赛 国一,PTA甲级 98 分。 致力于算法竞赛和算法教育已有 3 年,曾多次 AK 互联网大厂笔试,大厂实习经验丰富。 打卡…

Hive笔记-2

第 3 章 DDL (Data Definition Language) 数据定义 DDL数据定义语言 DML数据操作语言 3.1 数据库 (database) 3.1.1 创建数据库 1) 语法 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_…