用Java连接MySQL数据库的总结

✨个人主页: 不漫游-CSDN博客

前言

在日常开发中,使用Java连接MySQL数据库是一个常见的任务,涉及多个步骤。接着我就带着大家细细看来~

一.下载.jar 包文件

1.什么是.jar 文件

通俗点讲就是一个压缩包,不过里面存放的都是由Java代码编译形成的.class二进制字节码文件.

咱们可以通过Java的第三方库进行下载--->https://mvnrepository.com

记得看清楚MySQL版本,下好自己对应的即可。

二.把.jar包文件导入到自己的Java项目中去

1.在项目处创建一个目录,注意名字不要出现中文或特殊符号。

2.把.jar包文件复制粘贴到目录中去

3.右键刚才创建的目录,点击“添加为库”

4.成功的话,ideal 就可以分析出.jar 包里都有啥,如图~

三.进行链接操作

1.创建数据源对象

 //1.创建数据源对象DataSource dataSource = new MysqlDataSource();//服务器地址((MysqlDataSource)  dataSource).setUrl("JDBC:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource)  dataSource).setUser("root");//账户((MysqlDataSource)  dataSource).setPassword("root");//密码

其中,MysqlDataSource来自刚刚导入的包 ,并将其赋值给 ​DataSource​接口(JDBC自带的接口)类型的变量 ​dataSource​。

这里进行了向下转型,不用也是可以的,这个看自己选择

MysqlDataSource mysqlDataSource = (MysqlDataSource) dataSource;
mysqlDataSource.setUrl("JDBC:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("root");

接着,还要给这个dataSource 设置必要的属性

a.数据库服务器在哪里

观察第一段代码,URL代表“唯一资源定位符”,也就是我们日常用的链接。

中间那一段很长的代码不要被吓到,请看图解~

注意的是(1)127.0.01这个IP地址是特殊的,表示本机,即  jdbc代码和mysql服务器都在一台电脑上,倘若分开,就另外再写 。

(2)characterEncoding=utf8:这是一个连接参数,指定字符编码为UTF-8。其中UTF-8是一种广泛使用的字符编码,支持多种语言的字符。

useSSL=false:这是另一个连接参数,指定不使用SSL(Secure Sockets Layer)进行连接。SSL是一种加密协议,用于在网络上安全地传输数据。在这个例子中,我们选择不使用SSL,即是不加密。

(3)一般mysql服务器默认端口号是3306.

后面的账号密码就同理了,调用对应的方法,别输错就是啦~ 

b.访问服务器的账户

c.访问服务器的密码 

2.和数据库服务器进行网络连接

        //2.和数据库服务器进行网络连接Connection connection = dataSource.getConnection();

通过调用 ​dataSource​对象的 ​getConnection​方法来获取一个数据库连接(相当于打电话,成功通了才能继续做出后序操作)。

​而Connection​对象是JDBC API中的一个核心接口,代表与数据库的连接。

同时也要做出异常处理,直接那么写会编译报错的,这里采用的是在main方法中抛出异常

3.程序构造sql语句

    //3.程序构造sql语句String sql = "insert into student values(1,'张三')";PreparedStatement preparedStatement =  connection.prepareStatement(sql);

首先这行代码定义了一个sql插入语句,直接将值 ​1​和 ​'张三'​插入到 ​student​表(对应的表在数据库已经创好了)。 

然后,这行代码通过调用 ​connection​对象的 ​prepareStatement​方法来创建一个PreparedStatement​类型的对象。​用于执行预编译的SQL语句。

但是!!!

虽然直接在sql语句中插入值是可行的,但这样无法避免SQL注入攻击,即有的输入不符合格式,很容易造成异常,所以更推荐使用参数化查询(即使用占位符 ​?​)。这样更保证安全性~

        //3.程序构造sql语句String sql="insert into student values(?,?)";PreparedStatement preparedStatement =  connection.prepareStatement(sql);preparedStatement.setInt(1,1);preparedStatement.setString(2,"张三");

4.发送sql语句到服务器中,并让服务器执行

        //4.把sql语句发送到服务器上,让服务器执行int n=preparedStatement.executeUpdate();System.out.println(n);

 这行代码通过调用 ​PreparedStatement​对象的 ​executeUpdate​方法(这里的修改就是广义上的修改,只要改了表结构和数据都算update)来执行SQL插入语句。

​executeUpdate​方法返回一个整数值,表示受影响的行数,来确保修改成功!

5.释放资源

毕竟连接和创建语句的时候都要消耗资源,要是连接操作不用的话就关闭即可~

        //5.释放上述资源preparedStatement.close();connection.close();

这里就是要注意,释放资源的顺序要和创建资源的顺序相反。 

6.结果展示 

IDEA上成功输出1,表示1行受到影响

同时在MySQL上输入命令行->

select * from student;

 当然,我这里用的是图形化工具--DataGrip ,表中同样插入了数据,即操作成功!

四.通过Java代码对数据库中表进行增删改查操作

1.增

上图演示的就是增,即插入数据。这里就不再赘述了~

2.查

package JDBC;import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCTest2 {public static void main(String[] args) throws SQLException {//1DataSource dataSource=new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("JDBC:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("root");//2Connection connection=  dataSource.getConnection();//3String sql="select * from student";PreparedStatement statement=connection.prepareStatement(sql);ResultSet resultSet=statement.executeQuery();//4while(resultSet.next()){//next​方法返回一个布尔值,只有不存在即为false 就停止遍历System.out.println(resultSet.getInt("id"));System.out.println(resultSet.getString("name"));}//5resultSet.close();statement.close();connection.close();}
}

仔细观察,我想查询的是学生表中所有数据,并创建了一个 ​PreparedStatement​对象来执行该查询。但是调用的是​executeQuery​方法返回一个 ​ResultSet​对象,就是一个临时表。

但是在Java中可以当做集合类来看待 ,采取对应的遍历方式去打印表的结果即可~

结果如图--> 

3.改(狭义)

注意的是,这里的改就是修改表中的数据。

package JDBC;import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JDBCTest4 {public static void main(String[] args) throws SQLException {//1.DataSource dataSource=new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("JDBC:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("root");//2.Connection connection = dataSource.getConnection();//3.String sql="update student set name='李四' where id=1";PreparedStatement statement = connection.prepareStatement(sql);//4.int n=statement.executeUpdate();System.out.println(n);//5.statement.close();connection.close();}
}

和插入数据的一模一样,不同的就是sql语句,换成对应的update语句~把id为1的name改成 “李四”。

结果如图 ,IDEA依旧输出1,表示1行受到影响

而数据库对应的student表也发生对应修改!

4.删

package JDBC;import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JDBCTest3 {public static void main(String[] args) throws SQLException {//1.DataSource dataSource= new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("JDBC:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("root");//2.Connection connection=dataSource.getConnection();//3.String sql="delete from student where id=1";PreparedStatement statement= connection.prepareStatement(sql);//4.int n=statement.executeUpdate();System.out.println(n);//5.statement.close();connection.close();}
}

删除也是只要改成对应的sql语句,其他的不变-->删除id为1的数据。

结果如图 ,IDEA依旧输出1,表示1行受到影响

而数据库对应的student表也发生对应删除,成了一张空表。

看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力

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

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

相关文章

Docker基本管理1

Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自…

1.27、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1)原理简介 基于径向基神经网络(Radial Basis Function Neural Network, RBFNN)的曲线拟合是一种常用的非线性拟合方法,通过在输入空间中使用径向基函数对数据进行处理,实现对非线性关系的拟合。 RBFNN的基本原理是将输入空…

笔记 2 :linux 0.11 中的重要的全局变量 (a)

通过对全局变量的了解,也有助于了解整个代码的逻辑。就跟学习类一样,了解类有哪些成员变量,也有助于了解类的成员函数的功能。 以下介绍全局变量的顺序,符合这两本书的讲解顺序: (1)内存初始化相…

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩,是一种用时间换空间的 trade-off 思想,用 CPU 的时间去换磁盘或者网络 I/O 传输量,用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…

多文件编程:c/c++分文件写法(入门)

前言 一个 C 项目通常会采取 声明与定义分离 的方式进行编写,其基本遵循:头文件中写声明,源文件中写定义。 此外,为了区分头文件与源文件,会采用不同的文件后缀: .h: 头文件 .cpp: 源文件 (当然还有其他的…

写真图片视频打赏系统源码全开源无加密

这是一款开源的写真图片及视频打赏系统源码,顾名思义他可以做写真图片打赏站也可以做视频打赏站,支付对接了易支付,拥有独立代理后台,全部源码无加密,另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介…

小白如何学习软件开发

众所周知,软件开发技术是IT技术的核心技术,也是从事IT职业的技术学习首选,因此不少人会去学习,下面我给大家分享关于软件开发学习方法有哪些,欢迎阅读! 1、明确学习目的 学习编程能锻炼思维,使我们的逻辑思…

openlayers WebGL裁剪图层,双图层拼接显示

本篇介绍一下使用openlayers WebGL裁剪图层,双图层拼接显示 1 需求 WebGL裁剪图层,双图层拼接显示 2 分析 图层prerender和postrender事件的使用 WebGL scissor方法的使用 scissor方法指定了一个裁剪区域,用来将绘图区域限制在其限定的盒…

【LeetCode】2187. 完成旅途的最少时间

1. 题意 2. 分析 二分法有一个关键特征:如果答案answer满足题意,那么对于任何整数i,如果有i>answer,那么i也会是一个存在的解,只不过不是最优解。 本题想要找出一个达到 totalTrips 趟需要的最少时间成本t&#x…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统(RTOS),由 Richard Barry 在 2003 年开发,并且由亚马逊的 FreeRTOS 项目(一个由 Amazon Web Services (AWS) 支持的开源项目)进一步推动和发展。FreeR…

麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140387947 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Java--接口的定义与实现

1.Java的接口是一种约束 2.定义一些方法,让不同的人实现 3.方法都是 public abstract 4.常量都是public static final 5.接口不能被实例化: 接口中没有构造方法 6.接口可以多继承: 使用implements即可实现 7.必须要重写接口中的方法…

在家上网IP地址是固定的吗?

在数字化时代,互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都离不开网络的支持。然而,当我们在家中接入互联网时,可能会产生这样一个疑问:在家上网IP地址是固定的吗?下面一…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上增加了大量功能和简化操作,以提高开发效率。 2. 特点 无侵入:只做增强不做改变,引入它不会对现有项目产生影响。依赖少:仅仅依赖 …

CV05_深度学习模块之间的缝合教学(1)

1.1 在哪里缝 测试文件?() 训练文件?() 模型文件?(√) 1.2 骨干网络与模块缝合 以Vision Transformer为例,模型文件里有很多类,我们只在最后…

嘉立创EDA隐藏地线或者

https://prodocs.lceda.cn/cn/pcb/side-panel-left-net/#%E9%A3%9E%E7%BA%BF

50+dfm模型素人网红路人实时直播替换DFLive模型dfm格式

作为一名直播达人,我投入了大量时间和精力在网上收集和购买各种直播所需的模型资源。这些资源不仅包括男模、女模,还有明星脸、大众脸、网红脸以及各类稀有的素人模型。为了回馈广大直播爱好者,我将这些宝贵资源整理成一个合集,供…

elasticsearch性能调优方法原理与实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

ROS1导航状态机与ROS2导航行为树

ROS1和ROS2导航框架中用到的各种底层算法基本相同&#xff0c;比如代价地图&#xff0c;全局路径规划和局部路径规划等&#xff0c;它们最大的不同在于整个系统框架设计。 一&#xff0c;ROS1 导航状态机 ROS1导航功能包move_base是一个状态机&#xff0c;从软件设计上来看&am…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层&#xff1a;当SIP消息从网络中传输到达TCP/IP协议栈时&#xff0c;首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装&#xff0c;得到网络层的IP数据报。 网络层&#xff1a;网络层会对IP数据报进行解析&#xf…