用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 {
        //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="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        ResultSet resultSet=statement.executeQuery();
        //4
        while(resultSet.next()){//next​方法返回一个布尔值,只有不存在即为false 就停止遍历
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }
        //5
        resultSet.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表也发生对应删除,成了一张空表。

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

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

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

相关文章

沙盒软件大揭秘:你的数字世界“防火墙”

在数字时代,我们每天都会接触到各种各样的软件,其中不乏一些来源不明、可能存在潜在威胁的程序,我们总担心不小心点到什么“雷区”,让电脑或手机变得“病怏怏”。 为了保护我们的系统免受侵害,沙盒软件应运而生&#…

JavaScript Math 函数举例

https://andi.cn/page/621577.html

【YOLOv5/v7改进系列】改进池化层为YOLOv9的SPPELAN

一、导言 YOLOv9提出了一种新的方法和架构,旨在解决深度神经网络中的信息瓶颈问题并提升模型的性能。以下是该研究的主要优点: 理论分析与创新: 提出了可编程梯度信息(PGI)的概念,以应对深度网络为实现多重…

windows下gcc编译C、C++程序 MinGW编译器

文章目录 1、概要2、MinGW安装2.1 编译器下载2.2 编译器安装2.3 设置环境变量2.4 查看gcc版本信息 3、编译C、C程序3.1 编写Hello World.c3.2 编译C程序3.3 运行程序3.4 编译C程序 1、概要 GCC原名为GNU C语言编译器(GNU C Compiler),只能处…

技能 | postman接口测试工具安装及使用

哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具,主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景: Postman介绍: 1. 功能丰富的API客户端&#…

用Pytorch实现线性回归(Linear Regression with Pytorch)

使用pytorch写神经网络的第一步就是需要准备好数据集,设计模型(用于计算y_hat(y的预测值)),构造损失函数和优化器(使用PyTorch API),写训练周期(前馈&#xf…

FPGA资源容量

Kintex™ 7 https://www.amd.com/zh-tw/products/adaptive-socs-and-fpgas/fpga/kintex-7.html#product-table AMD Zynq™ 7000 SoC https://www.amd.com/en/products/adaptive-socs-and-fpgas/soc/zynq-7000.html#product-table AMD Zynq™ UltraScale™ RFSoC 第一代 AMD Z…

浅说区间dp(下)

文章目录 环形区间dp例题[NOI1995] 石子合并题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2006 提高组] 能量项链题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输…

AI大模型加持的新一代网络舆情系统——“速途观澜”舆情感知引擎发布上线

**近日,AI和数据驱动的新媒体生态服务商速途网络,发布上线企业声誉管理智能服务平台“速途观澜”。**该平台融合了速途最新研发升级的“观澜舆情感知引擎”,一款以大数据和AI为底座的网络舆情态势感知系统,这是速途在产品创新研发…

orcad导出pdf 缺少title block

在OrCAD中导出PDF时没有Title Block 最后确认问题在这里: 要勾选上Title Block Visible下面的print

共建特色基地 协同互促育人

作为芯片和集成电路、人工智能、智能网联车等临港重点产业布局的知识密集型相关企业,核心技术人才和技术骨干是公司参与全球竞争的重要核心竞争力之一。 知从科技通过不断的创新和规范,在深化产教融合、校企合作、“双师型”、联合办学协同育人、产业人…

Kafka Producer发送消息流程之分区器和数据收集器

文章目录 1. Partitioner分区器2. 自定义分区器3. RecordAccumulator数据收集器 1. Partitioner分区器 clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java,中doSend方法,记录了生产者将消息发送的流程,其中有一步…

【XSS】

文章目录 0x01 简介0x02 XSS Payload用法XSS攻击平台及调试JavaScript 0x03 XSS构造技巧XSS漏洞防御策略 跨站脚本攻击,Cross Site Script。(重点在于脚本script) 分类 反射型、存储型DOM型 漏洞原理:通过插入script篡改“HTML”…

字节码编程bytebuddy之通过Advice动态修改方法参数值

写在前面 本文看下如何通过bytebuddy的advice切面技术来动态修改方法入参值。 1:程序 首先定义premain: package com.dahuyou.change.method.param;//import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.agent.builder.AgentBu…

Java web从入门到精通 (第 2版)中文电子版

前言 《Java Web从入门到精通(第2版)》共分21章,包括Java Web应用开发概述、HTML与CSS网页开发基础、JavaScript脚本语言、搭建开发环境、JavaBean技术、Servlet技术、过滤器和监听器、Hibernate高级应用、Java Web的数据库操作、EL&#xf…

Linux 上 TTY 的起源

注:机翻,未校对。 What is a TTY on Linux? (and How to Use the tty Command) What does the tty command do? It prints the name of the terminal you’re using. TTY stands for “teletypewriter.” What’s the story behind the name of the co…

每日一题,力扣leetcode Hot100之49. 字母异位词分组

该题用哈希表解答,具有统一特征的作为哈希表的键名,然后满足要求的作为值 解法一: 我们将每个字符串进行排序,如果排序后的结果相同,则可以认为是字母异位词,我们将排序后的结果作为哈希表的key&#xff…

智能听诊器:宠物健康监测的革新者

宠物健康护理领域迎来了一项激动人心的技术革新——智能听诊器。这款创新设备以其卓越的精确度和用户友好的操作,为宠物主人提供了一种全新的健康监测方法。 使用智能听诊器时,只需将其放置在宠物身上,它便能立即捕捉到宠物胸腔的微小振动。…

S274多功能可编程RTU在智慧水务远程水质检测系统中的应用案例

钡铼第四代RTU S274作为一款多功能可编程的无线工业物联网数据监测采集控制短信报警终端,为智慧水务领域提供了强大的技术支持和解决方案。 技术概述与特点 钡铼S274基于UCOSII嵌入式实时操作系统,支持多种通信协议包括短信和MQTT,能够接入…