MySQL之JDBC编程

JDBC(Java Database Connectivity) 是 Java 提供的一种标准接口,用于连接和操作关系型数据库。JDBC 是 Java 语言和数据库之间沟通的桥梁,使得 Java 应用程序可以与各种数据库进行交互。

前期准备工作

要想在程序中操作MySQL就需要先安装MySQL的驱动包,并把驱动包引入到项目中

1.下载驱动包

这里下载驱动包【第三方的程序包】,有一下几种途径:

1)官网

2)github

3)中央仓库

由于GitHub需要翻墙,以及有一些数据库的官网比较难找且复杂,所以我们一般在中央仓库中去下载第三方的程序包【https://mvnrepository.com/(中央仓库官网)】

如上图所示,选择第二个

如上图所示,小编选择是的5.1系列【这个版本要根据大家的MySQL版本选择;由于小编电脑上的MySQL是5.7版本的,所以选择5系列的都可以】,在点击这个jar就可以下载了驱动包了。

2.将jar引入项目中

如上图所示,当我们创建好一个项目之后,先创建一个目录【目录的名字可以随便取;是一个专门放第三方库的目录】

如上图所示,我们把刚刚我们下载好的jar包复制到这个目录中

如上图所示,小编右键这个目录,有一个这个"Add as..."【这部操作就是把这个目录标记成库】


编写代码

1.首先我们要在MySQL数据库中创建好一个表。【如下图所示,小编是在java109这个数据库中创建的student这个表】

2.编写Java代码

1)创建dataSource

2)和数据库服务器建立连接

3)构造sql

4)把sql发给服务器

5)释放资源,关闭连接

代码展示:

java 复制代码
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 demo1 {
    public static void main(String[] args) throws SQLException {
        // 1.先创建一个DataSource【必须是那个java.sql的那个包】
        DataSource dataSource = new MysqlDataSource();   // MysqlDataSource()就是来自刚刚我们导入的那个包
        /**
         * 什么是url(网址)?
         * url(网址)表示网络中的资源位置
         * 这里的这个url不用背,只需要到时候复制粘贴即可【唯一需要变动的就是这个数据库的名字和IP地址】
         */
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");    // 账号
        ((MysqlDataSource) dataSource).setPassword("*********");   // 密码

        // 2.建立和数据库服务器之间的连接,连接好之后,才能进行后续的请求-响应的交互
        Connection connection = dataSource.getConnection();   // 注意这里的connection要选java.sql那个Connection

        // 3.构造sql(代码中的sql不需要写;)
        String sql = "insert into student values(1,'张三')";
        /**
         * PreparedStatement 会将 SQL 语句 预编译 并缓存,后续执行时 不需要重复编译,提升了执行效率。
         */
        PreparedStatement statement = connection.prepareStatement(sql);

        // 4.把sql发给服务器,返回值是一个整数,表示影响到的行数
        int n = statement.executeUpdate();   // 这一步就会这涉及到很多网络通信
        System.out.println("n = "+n);

        // 5.释放资源,关闭连接[释放顺序是后获取到的资源先释放]
        statement.close();
        connection.close();
    }
}

※ 上述是插入,其实删除,修改是一个道理的

运行结果:

如上图所示,这是小编运行完这个程序之后得到的结果。先是在控制台打印出一个1【即成功插入了一条数据】;然后小编再到这个MySQL服务器中,查看student这个表,可以看到这个数据也顺利插入了。


查询:

1)创建dataSource

2)和数据库服务器建立连接

3)构造sql

4)把sql发给服务器

5)遍历结果集合

6)释放资源

代码展示:

java 复制代码
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;

// jdbc 查询
public class demo2 {
    public static void main(String[] args) throws SQLException {
        // 1.创建一个dataSource
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("*********");

        // 2. 建立连接
        Connection connection = dataSource.getConnection();

        // 3. 构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // 4.执行sql【这一步就跟增删改是不一样的地方了】
        /**
         * ResultSet 就是表示查询的结果集合(临时表),此处就需要针对表进行遍历
         */
        ResultSet resultSet = statement.executeQuery();     // 跟增删改不一样的就睡返回的结果不一样【这个返回的结果是一个结果集】

        // 5.遍历结果集合
        /**
         * 通过 next 方法就可以获取到临时表中的每一行数据。如果获取到最后一行之后,再执行next就会返回false,循环结束
         */
        while (resultSet.next()){
            // 针对这一行进行处理【相当于在临时表内部,有一个"光标"】
            /**
             * resultSet提供了get×××的方法
             * 列是啥类型的就是用哪个方法
             * 根据列名就可以取出对应的值了
             */
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id +",name = " + name);
        }

        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

结果展示:

如上图所示,在控制台上显示的内容跟MySQL服务器查询的内容是一样的。

※ jdbc这套api使用起来是比较繁琐的,因此有一些大佬把jdbc的api又进一步封装,完成了一些操作数据库的框架(比如,MyBatis,JPA...ORM框架:把数据库的表里的记录 =\> Java对象 削弱了上述一系列流程的使用)

相关推荐
AI人工智能+电脑小能手26 分钟前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz29 分钟前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰4 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst4 小时前
数据库知识点
数据库
雪的季节4 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s5 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)6 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick19936 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&6 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
不爱编程的小陈6 小时前
事务的进化:从MySQL单机事务到TiDB分布式事务的探究
分布式·mysql·tidb