JDBC连接过程

JDBC连接过程

创建一个以JDBC连接数据库的程序,主要包含以下6个步骤:

1.加载数据库驱动
2.获取数据库连接
3.创建Statement
4.执行SQL
5.处理结果
6.关流,释放资源

1 加载JDBC驱动

在连接数据库之前,首先要加载对应数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。实现如下:

Class.forName("com.mysql.jdbc.Driver");

加载完成后,会将Driver类的实例注册到DriverManager类中。

2 获取数据库连接

要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接,实例如下:

conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8","root", "123456");

3 创建一个Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。

stat = conn.createStatement();

4 执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute

1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

String sql = "select * from account";
rs = stat.executeQuery(sql);

5 处理结果

两种情况:

1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。

实例如下:

while ( rs.next() ) {int id = rs.getInt("id");String name = rs.getString("name");double money = rs.getDouble("money");System.out.println(id+" : "+name+" : "+money );
}

6 关流,释放资源

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

1、关闭记录集
2、关闭声明
3、关闭连接对象。

		if( rs != null ) {try {rs.close();} catch (SQLException e) {e.printStackTrace();} finally {rs = null;}}if( stat != null ) {try {stat.close();} catch (SQLException e) {e.printStackTrace();} finally {stat = null;}}if( conn != null ) {try {conn.close();} catch (SQLException e) {e.printStackTrace();} finally {conn = null;}}

完整示例

public static void main(String[] args)  {Connection conn = null;Statement stat = null;ResultSet rs = null;try {//1.加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//2.获取数据库连接conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8","root", "123456");//3.创建Statementstat = conn.createStatement();//4.执行SQLString sql = "select * from account";rs = stat.executeQuery(sql);//5.处理结果(这里只是遍历然后打印到控制台)while ( rs.next() ) {int id = rs.getInt("id");String name = rs.getString("name");double money = rs.getDouble("money");System.out.println(id+" : "+name+" : "+money );}} catch (Exception e) {e.printStackTrace();} finally {//6.释放资源if( rs != null ) {try {rs.close();} catch (SQLException e) {e.printStackTrace();} finally {rs = null;}}if( stat != null ) {try {stat.close();} catch (SQLException e) {e.printStackTrace();} finally {stat = null;}}if( conn != null ) {try {conn.close();} catch (SQLException e) {e.printStackTrace();} finally {conn = null;}}}
}

返回面试宝典

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

useGeneratedKeys=“true” keyProperty=“id”

useGeneratedKeys“true” keyProperty“id” 这个注解在xml文件的insert方法中,可以用于返回主键值; 并且useGeneratedKeys参数只针对 insert 语句生效,默认为 false;

Java - @JSONField和@JsonProperty注解

JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的属性名和Java对象中的属性名之间的映射关系 JsonProperty注解是Jackson框架中的注解,用法类似于JSONField,也是指定JSON字符串中的属性名和Java对象中的属性名之间的映…

【STM32】1.8寸LCD显示实验

目录 一、硬件介绍 1. STM32F03C8T6 2. 1.8寸LCD 二、STM32CubeMX配置 1. 接口配置 ​编辑 2. 其他配置 三、LCD图片取模 1. 打开图片(.bmp格式) 2. 设置 3. 点击保存数组。 4. 将生成的数组复制到lcd_picture.h文件中。 四、代码测试&…

精通Nmap:网络扫描与安全的终极武器

一、引言 Nmap,即NetworkMapper,是一款开源的网络探测和安全审计工具。它能帮助您发现网络中的设备,并识别潜在的安全风险。在这个教程中,我们将一步步引导您如何有效地使用Nmap,让您的网络更加安全。 因为Nmap还有图…

顺序表详解(SeqList)

本文使用C语言进行顺序表的代码实现。 博主将使用代码和相关知识相结合的方式进行讲解,简单易懂,懵懂的大学生一听就会~ 顺序表是一种线性表的存储结构,它将数据元素存储在一段连续的存储空间中,每个元素占据一个存储单元&#x…

怎样使用Pyglet库给推箱子游戏画关卡地图

目录 pyglet库 画图事件 按键事件 程序扩展 关卡地图 pyglet库 是一个跨平台的Python多媒体库,提供了一个简单易用的接口来创建窗口、加载图像和视频、播放音频、处理用户输入事件以及进行2D图形绘制。特别适合用于游戏开发、视听应用以及其它需要高效图形渲染…

NestJS入门9:管道入门

前文参考 NestJS入门1:创建项目 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger NestJS入门6:日志中间件 NestJS入门7&…

Unity数据持久化之PlayerPrefs

这里写目录标题 PlayerPrefs概述基本方法PlayerPrefs存储位置实践小项目反射知识补充数据管理类的创建反射存储数据----常用成员反射存储数据----List成员反射存储数据----Dictionary成员反射存储数据----自定义类成员反射读取数据----常用成员反射读取数据----List成员反射读取…

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

欢迎大家来到c语言知识小课堂,今天的知识点是操作符和进制 目录 一、进制之间的转化1、什么是二进制,八进制,十进制,十六进制2、进制之间的转化其他进制转化为十进制十进制转化为二进制二进制转化为八进制八进制转化为二进制二进…

力扣55. 跳跃游戏(动态规划)

Problem: 55. 跳跃游戏 文章目录 题目描述思路复杂度Code 题目描述 思路 我们将问题稍做转换每次求取当前位置可以走到的最远位置,在此基础上我们将最终判断是否能走出整个nums;同时我们要判断中途会不会遇到某个位置是0使得不能继续走下去 复杂度 时间…

【GO语言卵细胞级别教程】06.GO语言的字符串操作

【GO语言卵细胞级别教程】06.GO语言的字符串操作 温馨提示: 本文中使用的项目模块均是 【05.项目创建和函数讲解】 中创建的,具体如何创建项目,请参考 【GO语言卵细胞级别教程】05.项目创建和函数讲解 演示项目仓库:https://gi…

ArcGIS中查看栅格影像最大值最小值的位置

如果只是想大概获取栅格影像中最大值最小值的位置进行查看,可以不用编写程序获取具体的行列信息,只需要利用分类工具即可。 假设有一幅灰度影像数据,如下图所示。 想要查看最大值2116的大概位置在哪里,可以右击选择图层属性&…

k-邻近算法(kNN)

目录 k-近邻算法概述 k-近邻算法的一般流程 kNN算法伪代码 k-近邻算法概述 优点:精度高、对异常值不敏感、无数据输入假定 缺点:计算复杂度高、空间复杂度高 适用数据范围:数值型和标称型 k-近邻算法的一般流程 (1&#x…

LeetCode 0105.从前序与中序遍历序列构造二叉树:分治(递归)——五彩斑斓的题解(若不是彩色的可以点击原文链接查看)

【LetMeFly】105.从前序与中序遍历序列构造二叉树:分治(递归)——五彩斑斓的题解(若不是彩色的可以点击原文链接查看) 力扣题目链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-a…

【hoare基础版】快速排序算法(1)

目录 交换排序 QuickSort快速排序 Hoare整体思路 图解分析 ​ Hoare版本代码 总代码 时间复杂度 交换排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键…

相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

有关JAVA中文乱码问题的解析及解决办法

大家好我是咕噜美乐蒂,很高兴又和大家见面了!下面我就和大家一起来了解一下由于Java中文乱码问题比较复杂,需要从字符编码、文件编码、输入输出流等多个方面进行分析和解决。在本文中,我将详细介绍Java中文乱码问题的原因、解析方…

Arm的Cortex-A和Cortex-X内核架构对比

Arm的Cortex-A和Cortex-X内核系列都是基于ARM架构设计的高性能处理器核心,但它们在设计目标、市场定位以及性能优化上有所不同: ### Cortex-A系列 - **设计目标**:Cortex-A系列是为广泛的移动计算设备和服务器平台设计的通用处理器内核&…

数据安全治理:构建与实施的关键要素及总体架构

本文将深入探讨数据安全治理的核心要素和总体架构,旨在为组织提供一个明确的指南,帮助他们构建和实施有效的数据安全治理策略。在数字化快速发展的今天,理解并实施这些要点和架构不仅是提升数据安全的关键,也是确保组织能够在复杂…