JDBC下载及连接数据库处理

article/2025/10/24 18:41:34

一、jdbc下载

musql-connection下载:

需要对应mysql版本进行下载

可以在管理员模式下打开cmd输入select version() 查看版本信息

什么是JDBC?

JDBC(Java DataBase Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询、更新(增删改)数据库中数据的方法。JDBC,是Sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。下图出自博客

img

二、JDBC操作

1.创建java类

将之前下载的软件包解压后找到这个复制到lib包下

  • mysql中创建一个数据库

要对数据库进行处理,首先得创建一个数据库,在mysqlyog中直接创建一个命名为market的数据库

2.数据库的连接

 public class Test {public static void main(String[] args)  {// 获取mysql连接地址                          market为要连接的数据库名String strURL = "jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";//(因为我的mysql字符编码不是utf8所以URL会有所区别)//有的是  jdbc:mysql://localhost:3306/数据库名称?&useSSL=false&serverTimezone=UTC// 用户名称String username = "用户名";// 用户密码String password = "用户密码";​try {Class.forName("com.mysql.jdbc.Driver");//  mysql加载驱动//mysql.5版本不用加cj; 若是mysql.8 就需要加ysql.cj.jbdc... ​Connection con = DriverManager.getConnection(strURL, username, password);​System.out.println("数据库连接成功");con.close();​System.out.println("数据库已关闭");​}catch (ClassNotFoundException | SQLException e){e.printStackTrace();}}}
        

补充查看字符编码命令:

修改字符编码命令:

 set character_set_server=utf8;

MySQL数据库编码

3.创建对象对数据库进行处理

 // 创建statement类对象,用来执行SQL语句!​Statement stm = con.createStatement();
 

知识速递:

  1. jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

  2. 增、删、改 用executeUpdate()返回值为int型,表示被影响的行数

  3. 查用executeQuery() 返回的是一个集合 .next()表示 指针先下一行,还有first()指向第一行 、last()指向最后一行、如果有数据就返回true

     4.ResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet =    stm.executeQuery(sql),

4.数据库的增加

 //定义sql语句对数据库进行处理String sql="INSERT INTO student VALUES(6,'七月六便士',53)";​//用executeUpdate()检查是否插入成功int i= stm.executeUpdate();//返回值为被影响的行数​if(i !=1 ){System.out.println("操作失败");}else{System.out.println("操作成功");}​

5.数据库的查询

  • 查询所有元素

 String sql="SELECT * FROM student";​// 通过SQL查询,把查询到的结果返回至Result的结果集ResultSet rs = stm.executeQuery(sql);​while(rs.next()){int id=rs.getInt("id");String name=rs.getString("name");System.out.println("id:"+id+" name:"+name);}

查询指定元素信息
 String sql="SELECT * FROM student WHERE id=? AND name=?";​// 为SQL语句设置参数,这里setObject()方法中的第一个参数代表的是SQL语句中的第几个问号,而第二参数代表的是设置变量PreparedStatement pst = con.prepareStatement(sql);//已经预处理了,后面不用再加sql​pst.setInt(1,2);//第一个数表示是第几个问号pst.setString(2,"情书");​ResultSet rs = pst.executeQuery();//不需要sql了,前面已经预处理了​while(rs.next()){int id=rs.getInt("id");String name=rs.getString("name");int price=rs.getInt("price");System.out.println("id:"+id+" name:"+name+" price:"+price);}

PreparedStatement与Statement:

PreparedStatement有预编译的过程,而且绑定了sql语句,无论执行多少遍,都不会再次进行编译。而Statement则不同,sql执行多少遍,就需要编译多少遍,所以PreparedStatement效率要比Statement

6.关闭仓库

 //最后需要关闭rs.close();stm.close();con.close();

在数据库操作完毕之后,需要关闭ResultSetStatementConnection

操作完数据库之后ResultSetStatementConnection`是在程序中占用内存的,所以我们需要关闭,而且需要注意关闭的顺序,是从左到右的。

三、数据库工具类

为什么需要?

如果数据信息量很庞大的话,不断地打开关闭数据库会非常的麻烦,所以就把操作封装成一个Java类,并且通过配置资源配置文件储存需要数据库连接基本信息。

db.properties:

连接池配置文件db.properties是java中采用数据库连接池技术完成应用对数据库的操作的配置文件信息的文件。

新建一个resource目录,在里面新建一个资源包命名为db。

在db.properties输入

 driver=com.mysql.cj.jdbc.Driver//注意mysql.5没有cjurl=jdbc:mysql://localhost:3306/market?&useSSL=false&serverTimezone=UTCusername=rootpassword=123456

jdbc工具类处理数据库

最终代码模板:

1.jdbc工具类代码; 创建在jdbc包下的 JDBCUtil 类(固定的代码形式) 

 package jdbc;​import java.sql.*;​public class JDBCUtil {// MySQL 5应为com.mysql.cj.jdbc.Driverprivate static final String driver = "com.mysql.jdbc.Driver";private static final String url = "jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";private static final String userName = "用户名";private static final String password = "用户密码";​// 获取数据库连接public static Connection getConnection() {Connection con = null;try {Class.forName(driver);con = DriverManager.getConnection(url, userName, password);} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}return con;}​// 数据库查询,返回结果集public static ResultSet query(Connection con, PreparedStatement st, ResultSet rs, String sql, Object[] params) throws SQLException {st = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);if (params != null) {for (int i = 0; i < params.length; i++) {st.setObject(i + 1, params[i]);}}rs = st.executeQuery();return rs;}​// 数据库增删改public static int update(Connection con, String sql, Object[] params, ResultSet rs, PreparedStatement st) throws SQLException {st = con.prepareStatement(sql);for (int i = 0; i < params.length; i++) {st.setObject(i + 1, params[i]);}return st.executeUpdate();}​// 关闭数据库连接public static void release(Connection con, Statement st, ResultSet rs) {boolean flag = true;​if (rs != null) {try {rs.close();rs = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}​if (st != null) {try {st.close();st = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}​if (con != null) {try {con.close();con = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}}}​

2.mysql驱动

 driver=com.mysql.jdbc.Driver ///还是要注意有无 cj.url=jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8username=rootpassword=123456

3.测试代码,处理数据库

查询数据

 package jdbc;​import java.sql.*;​public class Test2 {public static void main(String[] args) {Connection con;PreparedStatement st = null;ResultSet rs = null;try {// 获取链接con = JDBCUtil.getConnection();String sql = "SELECT * FROM student WHERE id = ? AND name = ?";st = con.prepareStatement(sql);Object[] params = {2, "情书"};rs = JDBCUtil.query(con, st, rs, sql, params);while (rs.next()) {int id = rs.getInt(1);String name = rs.getString(2);int price = rs.getInt(3);System.out.println(id + " " + name + " " + price);}// 关闭数据库JDBCUtil.release(con, st, rs);} catch (SQLException e) {e.printStackTrace();}}}
 

增加数据

 try {// 获取链接con = JDBCUtil.getConnection();​String sql ="INSERT INTO student VALUES(? ,?,?)";​// st = con.prepareStatement(sql);​Object[] params = {6 ,"七月六便士",53};​int i = JDBCUtil.update(con,sql, params,rs ,st);​if(i != 1 ){System.out.println("插入失败");}else{System.out.println("插入成功");}​// 关闭数据库JDBCUtil.release(con, st, rs);} catch (SQLException e) {e.printStackTrace();}

关于VALUES(?, ?, ?) :

在PreparedStatement里面我们需要对SQL语句进行预处理, 所以首先需要把这些参数用占位符?来代替

而statement里面并不需要首先预处理 , 所以就不需要这边的参数用 ?来代替

PreparedStatement是如何防止SQL注入的?


http://chatgpt.dhexx.cn/article/G9kLrVpe.shtml

相关文章

Java之JDBC安装、使用详解(2021最新!)

JDBC安装以及使用详解 JDBC概念JDBC下载安装下载JDBC安装JDBC 详细步骤常用数据库URL地址的写法&#xff1a; Connection对象三种执行对象&#xff1a;用于将 SQL 语句发送到数据库中createStatementPreparedStatementCallableStatement 执行SQL语句获取结果&#xff08;Result…

什么是视频数据结构化?

什么是视频数据结构化? 视频结构化是一种将视频内容中的重要信息进行结构化提取的技术&#xff0c;利用它对视频内容按照语义关系&#xff0c;采用时空分割、特征提取、对象识别、深度学习等处理手段&#xff0c;组织成可供计算机和人理解的文本信息或可视化图形信息。在实际应…

非结构化数据怎么存?

IDC 预测&#xff0c;2018年到2025年间&#xff0c;全球产生的数据量将会从33 ZB增长到175 ZB&#xff0c;其中超过80%为非结构化数据&#xff0c;并且每年将以指数级趋势递增。 数字化汪洋之上&#xff0c;海雾弥漫&#xff0c;遮天蔽日&#xff0c;组织如何冲破重重阻碍&…

数据结构之图的基本介绍

图的基本介绍 线性表局限于一个直接前驱和一个直接后继的关系&#xff0c;树也只能有一个直接前驱也就是父节点。当我们需要表示多对多的关系时&#xff0c;就需要用到图。 图的基本概念 图&#xff08;Graph&#xff09;是一种数据结构&#xff0c;由顶点&#xff08;verte…

2024年王道数据结构【考研全套笔记】

22年、23年数据结构大纲一致&#xff0c;24年大纲——>目前和23年大纲保持一致 该博客怎么食用&#xff1f; 大部分考408的友友&#xff0c;只是买了书&#xff0c;书上配置的免费视频是滞后2年的&#xff0c;非常不友好&#xff0c;建议在某鱼上or大学慕课正规购买&#x…

数据结构入门学习之数据结构学些什么?

在刚开始学习数据结构&#xff0c;我推荐一定要搞懂三个问题&#xff0c;这将对我们学习数据结构的帮助很大&#xff0c;能让我们对数据结构有一个清晰的认识&#xff0c;问题如下 1.学习数据结构是干嘛用的&#xff1f; 2.什么是数据结构&#xff1f; 3.数据结构要学习什么…

专升本数据结构复习

数据结构知识点总汇 主要参考书目&#xff1a; 程海英老师的《数据结构&#xff08;C语言版&#xff09;》教材严蔚敏&#xff0c;李冬梅&#xff0c;吴伟民&#xff0e;《数据结构&#xff08;C语言版&#xff09;》 推荐视频&#xff1a;西北大学 数据结构-耿国华老师 说…

数据结构基础

一、基本概念 1、数据 数据&#xff08;Data&#xff09;是描述客观事物属性的数、字符及所有能被输入到计算机中并被计算机程序识别和处理的符号的集合。 解释&#xff1a;数据不仅包括整型、字符型等数值类型&#xff0c;还包括字符及声音、图像、视频等非数值类型。 数据…

锚链接跳转

想让页面跳转到指定的地方&#xff0c;这个时候我们可以用到锚链接&#xff0c;锚链接主要有两个部分组成&#xff0c;点击的地方和跳转的地方&#xff0c;点击的地方我们用 <a> 标签&#xff0c;其 href 属性和即将跳转的标签的 id 保持一致就可以了&#xff0c;举个栗子…

Html中锚文本链接怎么写?锚文本链接有属性用法

锚文本链接的概念&#xff1a; 锚文本又称锚文本链接&#xff0c;是链接的一种方法。和超链接相似&#xff0c;超链接的代码是锚文本&#xff0c;把关键词做一个链接&#xff0c;指向其他网页&#xff0c;这种方法的链接就叫作锚文本。锚文本实际上是建立了文本关键词与URL链接…

Markdown(5):锚链接

一、外部链接 格式&#xff1a; 名称 示例: 百度 二、文内链接 格式 名称 示例: 前往测试锚点 这里的markdown图片没有意义&#xff0c;是为了隔开跳转锚点和锚点之间的位置&#xff0c;使点击锚点时明显的呈现跳转效果。 我是测试锚点 我是测试内容

创建锚点链接

如果网页内容较多&#xff0c;页面过长&#xff0c;浏览网页时就需要不断地拖动滚动条&#xff0c;来查看所需要的内容&#xff0c;这样效率较低且不方便。为了提高信息的检索速度&#xff0c;HTML语言提供了一种特殊的链接——锚点链接&#xff0c;通过创建锚点链接&#xff0…

Vue锚链接(两种方法) scrollIntoView

第一种&#xff1a;常见 锚链接&#xff0c;id和 href 结合起来 <div id"one" style"height: 300px;">第一</div> <div id"two" style"height: 300px;">第二</div><a href#one>回到第一</a> <…

Html的锚点链接

HTML中的链接&#xff0c;正确的说法应该称作"锚点"&#xff0c;它命名锚点链接(也叫书签链接)常常用于那些内容庞大繁琐的网页&#xff0c;通过点击命名锚点&#xff0c;不仅让我们能指向文档&#xff0c;还能指向页面里的特定段落&#xff0c;更能当作"精准链…

页面中的锚链接

1、锚链接 方法一 // 设置锚点链接 <a href"#miao">锚点链接</a> // 锚点 <a namemiao>锚点</a>注&#xff1a;name的属性值和锚链接的href中名一样 方法二 // 设置锚点链接 <a href"#miao">锚点链接</a> // 锚…

HTML链接(锚)

锚 使用<a>标记 有两种使用 <a> 标签的方式&#xff1a; 通过使用 href 属性 - 创建指向另一个文档的链接通过使用 name 属性 - 创建文档内的书签 这样说有点抽象&#xff0c;还是在几种实际应用中理解创建链接和创建书签的含义吧&#xff01; 实现网页之间跳…

HTML超链接、锚链接

超链接和锚链接的区别&#xff0c;就是超链接需要跳砖页面&#xff1b;锚链接不需要&#xff0c;在同一页面中跳转到某个位置。 不管是超链接&#xff0c;还是锚链接&#xff0c;都是用a元素。 超链接&#xff1a;超链接的使用就是在href中加入网址&#xff0c;如果是图片超链…

超链接 锚链接 功能性链接 块元素 行内元素

目录 超链接标签 页面间的锚链接 不同页面中的锚链接 功能性链接 行内元素和块元素 超链接标签 超链接的基本应用: 超链接包含两部分内容:1.是链接地址,可以是某个网址或文件的路径,对应为<a>标签的href属性 2. 是链接文本或图像,单击该文本或图像,将跳转到href属…

HDFS原理简图汇总

HDFS原理简图汇总 1.HDFS结构简图 2.namenode和datanode心跳机制 3.namenode元数据更新的checkpoint机制 4.hdfs写数据机制 5.hdfs读数据机制 一图胜千言&#xff0c;把文字转为图形确实可以更进一步对知识做提炼&#xff0c;如有错漏&#xff0c;欢迎大家留言指正。

Hadoop HDFS原理笔记

1&#xff1a;Hadoop家族 2&#xff1a;Hadoop的两大核心 3&#xff1a;HDFS介绍 4&#xff1a;HDFS结构 5&#xff1a;HDFS架构图 6&#xff1a;HDFS的数据存储单元&#xff08;Block&#xff09; 7&#xff1a;HDFS设计思想 8&#xff1a;NameNode&#xff08;NN&#xff0…