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对象] 削弱了上述一系列流程的使用)

相关推荐
shyの同学1 小时前
分布式ID生成方案:数据库号段、Redis与第三方开源实现
redis·分布式·mysql·id
月落星还在1 小时前
Redis 的过期策略与键的过期时间设置
数据库·redis·bootstrap
cg50174 小时前
MySQL数据库复杂的增删改查操作
数据库·mysql
虾球xz5 小时前
游戏引擎学习第147天
数据库·学习·游戏引擎
向上的车轮6 小时前
什么是时序数据库?有哪些时序数据库?常见的运用场景有哪些?
数据库·时序数据库
岱宗夫up7 小时前
【Python】Django 中的算法应用与实现
数据库·python·opencv·django·sqlite
比花花解语7 小时前
使用数据库和缓存的时候,是如何解决数据不一致的问题的?
数据库·缓存·数据一致性
YGGP8 小时前
Redis篇:基础知识总结与基于长期主义的内容更新
数据库·redis·缓存
KINICH ahau8 小时前
数据库1-2章
数据库·oracle
我想吃烤肉肉8 小时前
leetcode-sql数据库面试题冲刺(高频SQL五十题)
数据库·sql·leetcode