JDBC编程(主要针对其流程)

JDBC编程

注:在本篇博客中,使用的数据库是mysql!!!

一、JDBC编程六步

1、注册驱动

这步就是在告诉Java程序,即将要连接的为哪个品牌的数据库, 这里有两种方法

//就是使用一个了多态,try {Driver driver = new com.mysql.cj.jdbc.Driver();DriverManager.registerDriver(driver);} catch (SQLException e) {throw new RuntimeException(e);}
    try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {throw new RuntimeException(e);}

注意:第一种方法不如第二种方法使用,且第二种如果要提高代码复用率的话,可以将其放入static的静态代码块

2、获取链接

这一步是在表示JVM的进程和数据库进程之间的通道打开了,且在这一步中还要在java代码中定义关于一些数据库的信息,但是尽量不要直接写在java代码中,如下图:

在这里插入图片描述

所以,可以在src文件夹下,创建一个properties包,在里面放入关于数据库的信息:

url = com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost(本地地址):3306/d1(数据库名)
user=root
password=root

但是要调用的话,还是用使用以下代码:

ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");Connection conn = DriverManager.getConnection(url,user,password);//获取链接

3、获取数据库操作对象

Demo:

Statement st = conn.createStatement();

4、执行sql语句

这里就是要和数据库相关联了,这里我使用的是mysql数据库

//这里有两种情况,使用DQL(select)语句和DML(update、insert、delete)语句是不一样的//①DML语句
String sql = "update user set name = 'jack' where id = 1";
int count = st.executeUpdate(sql);//这个返回值影响数据库的记条数//②DQL语句
String sql = "select * from user";
ResultSet resultset = new ResultSet();
resultset = st.executeQuery(sql);

5、处理查询结果集

对于这一步,只针对DQL语句才有查询结果集。

对于处理结果集,取数据采用getString()方法,这个方法不管你数据库中存入的数据的数据类型。

//比如这里有一个数据表user
/*
user
------------------------
id      name       password
------------------------
1       小明        123456
------------------------
2       小王        123564
*///再结合以上的步骤,假设我们只取出第一行的数据
//第一种方法(1表示第一列,以此类推):
String id = resultset.getString(1);//取出第一行
String name = resultset.getString(2);//取出第二行
String password = resultset.getString(3);//取出第三行
//第二种方法(使用列的名称):
String id = resultset.getString("id");//取出第一行
String name = resultset.getString("name");//取出第二行
String password = resultset.getString("password");//取出第三行//如果想取出第二例,使用一个循环就可以去实现,接下来使用代码展示取出
while(resultset.next()){String id = resultset.getString("id");String name = resultset.getString("name");String password = resultset.getString("password");System.out.println(id+","+name+","+"password");
}

6、释放资源

这一步看似对全局不起作用,其实关闭资源是很重要的一步。关闭顺序:按先关闭ResultSet,然后关闭PreparedStatement,最后关闭Connection。注意:第三方的数据库连接池,使用的时候,获取到Connection之后,使用完成,调用的关闭方法(close()) ,并没有将Connection关闭,只是放回到连接池中,如果调用的这个方法,而没有手动关闭PreparedStatement、或者Statement等,则这个PreparedStatement并没有关闭,这样会使得开发的程序内存急速增长,java的内存回收机制可能跟不上速度,最终造成Out of memory Error。

而关闭资源的位置,最好是在finally语句中,这是最好的位置。

finally {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (connection != null) {try {connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}}

最后,这里写一个所有步骤都结合在一起的代码

Demo:

public class Test {//第一步static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}//第二步String url = "jdbc:mysql://127.0.0.1:3306/qf";String root = "root";String password = "root";//获取链接对象Connection connection = null;ResultSet resultSet = null;PreparedStatement preparedStatement = null;try {connection = DriverManager.getConnection(url, root, password);//第三步//获取sql预编译器preparedStatement = connection.prepareStatement("select * from user);//第四步//结果集resultSet = preparedStatement.executeQuery();//第五步, 这里就不展示处理查询结果集了,在上面也涉及到了} catch (SQLException e) {throw new RuntimeException(e);//第六步}finally {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (connection != null) {try {connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}

最后在这里祝愿大家,学业有成!!!

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

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

相关文章

Dokit 开源库:简化 Android 应用开发的利器

Dokit 开源库:简化 Android 应用开发的利器 一、Dokit 简介二、Dokit 功能三、Dokit 使用3.1 DoKit Android 最新版本3.2 DoKit Android 接入步骤 四、总结 在 Android 应用开发过程中,我们经常需要处理调试、性能优化和用户体验等方面的问题。然而&…

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发

stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发一、前言二、资料收集三、STM32CubeMX配置串口1、配置开启USART12、设置usart中断优先级3、配置外设独立生成.c和.h 四、MDK串口收发…

期货股市联动(期股联动助推资本市场上扬)

期股联动——期货股市助推资本市场上扬 随着我国资本市场的不断发展,期货和股票这两个市场也在逐渐紧密地联系起来。期货和股票的相互作用是一种“期股联动”,它能够促进资本市场的上扬。 期货与股票市场 期货市场是一种标准化的场外交易市场&#xf…

【jvm从入门到实战】(十) 实战篇-内存调优

内存溢出和内存泄漏:在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的。少量的内存泄漏可以容忍&#x…

mysql:查看尝试连接mysql服务器的次数(包含成功和失败的尝试)

运行命令show global status like Connections;查看尝试连接mysql服务器的次数(包含成功和失败的尝试)。 例如:

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC,每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时,Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…

七:爬虫-数据解析之正则表达式

七:正则表达式概述 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母&#xf…

如何下载知网论文、专利的PDF格式

知网的论文格式有其特有的格式:CAJ。将CAJ格式转化为Word或者PDF非常麻烦,且会出现乱码的情况,直接用知网官方的CAJ浏览器也不太方便。为此,困扰了许久。 其实,知网可以直接下载PDF格式,只需在浏览器上安装…

Python启动提示ERROR: [WinError 10013] ��һ�ַ���Ȩ�޲�����ķ�ʽ����һ�������׽��ֵij��ԡ�

启动项目后: 其实就是默认的5000端口号被占用,端口号冲突 ,改下端口即可。 点击:编辑配置 空格加 --port5001 启动成功,点击下图标记位置

【STM32工具篇】使用CLion开发STM32

本文主要记录使用CLion开发STM32,并调试相关功能 使用的CLion版本:2023.3.1 CLion嵌入式配置教程:STM32CubeMX项目 |CLion 文档 (jetbrains.com) OpenOCD官网下载:Download OpenOCD for Windows (gnutoolchains.com) GNU ARM工…

【C++】理解string类的核心理念(实现一个自己的string类)

目录 一、引言 二、自我实现 1.成员变量的读写 2.构造与析构 3.迭代器 4.插入字符或字符串 尾插 中间插入 5.删除字符或子字符串 6.查找字符或子串 7.获取子串 三、补充 一、引言 实现自己的 string 类是学习 C 语言和面向对象编程的一个好方法。通过编写一个简单的…

浅析 ArrayList

ArrayList是一个使用List接口实现的Java类。顾名思义,Java ArrayList提供了动态数组的功能,其中数组的大小不是固定的。它实现了所有可选的列表操作,并允许所有元素,包括null。 ArrayList 继承于 AbstractList ,实现了…

《数据结构、算法与应用C++语言描述》- 最小输者树模板的C++实现

输者树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_31loserTree 输者树:每一个内部节点所记录的都是比赛的输者,晋级的节点记录在边上。本文中,赢者是分数较低的那个,输者是分数高…

虾皮电商申请:一站式开店指南

随着跨境电商的快速发展,越来越多的商家开始意识到东南亚市场的潜力。虾皮电商(Shopee)作为东南亚地区最大的电商平台之一,为商家提供了一个开拓市场的机会。本文将详细介绍如何在虾皮电商平台上开店,并给出一些建议来…

STM32/STM8资源节约主义编程方式

STM32/STM8资源节约主义编程方式 在小资源芯片进行代码设计时,如STM32C0系列,STM8系列,因为官方库本身要包含各种场景应用特征的支持,所以会有一些冗余的代码占用更多FLASH空间。当需要实现资源占用最简化设计方式时,…

uniapp 导入ucharts图表插件 H5项目, 使用echarts eopts配置

先下载ucharts H5示例源码: uCharts: 高性能跨平台图表库,支持H5、APP、小程序(微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序)、Vue、Taro等更多支持canvas的框架平台&#…

如何在公网环境下使用Potplayer访问本地群晖webdav中的影视资源

文章目录 本教程解决的问题是:按照本教程方法操作后,达到的效果是:1 使用环境要求:2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透,映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

硬件基础与实施运维工程师的介绍

目录 一、实施与运维 1.2 实施运维一般做什么 1.1.1实施工程师 1.1.2运维工程师 1.3 实施运维需要具备哪些技能 三、基础硬件 四、操作系统 4.1 Windows 4.2 Linux 4.3 macOS 4.4 Unix 五、总结 一、实施与运维 1.1 实施运维是干什么的 1、运维工程师负责服务的稳…

第二周:AI产品经理全局学习

一、AI产品架构全景 二、 AI产品岗位分析和了解 三、 AI产品能力模型 四、AI产品经理工作流 五、AI产品经理学习路径和规划 六、本周市场动态

力扣 面试经典150算法题

1合并两个有序数组88. 合并两个有序数组-CSDN博客简单23