JDBC编程

提示:以下是本篇文章正文内容

JDBC编程

JDBC编程 就是通过 Java 代码来操作数据库。实际开发中,绝大多数情况,都是通过代码操作数据库的,手动操作数据库,只有少数的,调试,测试,验证环境…才会涉及到。

Java 中操作数据库,最基础的方式就是JDBC(当然还有其它方式)。

数据库是一个类别,除了MySQL数据库之外,还有Oracle、SQL Server等其它数据库。而代码操作数据库的前提,是需要数据库提供API,咱们调用API来完成操作的。这里的API(Application Programming Interface)其实是应用程序编程接口的意思。举个例子,如果你去餐厅点餐,那么你无需顾忌菜品是如何制作出来的,你只需根据菜单点菜,后厨收到菜单要求,自然而然就会完成你所需要的菜品。在这个过程中,菜单就相当于一个 API,用来完成你与后厨之间的交互。

由于数据库多种多样,那么它们所提供的 API 自然就不一样了。如果每次对不同数据库进行编程,都需要学习该数据库的 API ,那么这无疑大大增加了程序员学习的成本。因此, Java 就站出来了,将这些数据库厂商聚拢到一起商讨,决定由Java 提供一套 API 的标准,把各个厂商的数据库已经搞好的 API ,再重新包装一下,搞到一起。这个时候,程序员只要按照一套 API 来搞就行了,而无需再关心各自数据库 API 的差异。各个数据库原有的 API 不变,在这个基础上,加个封装层,适配到 JDBC 这一套接口上。

  1. 准备工作,引入MySQL的JDBC驱动包:
    这里的驱动包,属于“第三方库”,不是 JDK 里原生就有的,而是需要通过其它途径下载来并引入到项目中。
    Java世界中,有一个叫做“中央仓库”的东西。有一群大佬,把第三方库收集起立,统一放到一个服务器上,就可以通过这个服务器获取到了。后续一些新的开发者做了些新的第三方库,也会上架到这个中央仓库中。这也是所谓 Java 中的生态。
    以下是引入 JDBC驱动包的步骤:
    1.访问网站
    https://mvnrepository.com/
    在这里插入图片描述
    2.搜索MySQL
    以下两个都是 JDBC驱动包的下载源,只不过上面是MySQL比较新的版本的驱动包(本机MySQL版本是5.7.27)。
    在这里插入图片描述
    3.只要大版本是一样的,那么任意下载一个问题就不大。
    在这里插入图片描述
    4.点击jar进行下载。
    在这里插入图片描述
    5.打开文件所在目录,复制文件。
    在这里插入图片描述
    6.打开IDEA,创建一个目录。
    在这里插入图片描述
    7.将文件复制到目录。
    在这里插入图片描述
    8.右键文件,点击Add as library。
    在这里插入图片描述
    9.最后完成 JDBC驱动包 的导入。
    在这里插入图片描述

以下是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 JDBC_Test {

    public static void main(String[] args) throws SQLException {
        //1.创建数据源,数据源描述了你要操作的数据库在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8?useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");


        //2.和数据库服务器,建立连接
        Connection connection = dataSource.getConnection();

        //3.构造一个SQL
        String sql = "insert into student values (3, '张三')";
        //需要把String SQL 转换成 语句对象
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.把构造好的 SQL 发送给服务器去执行
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        //5.最后一步,释放必要的资源
        statement.close();
        connection.close();

    }
}

说明:

 //1.创建数据源,数据源描述了你要操作的数据库在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8?useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

数据库是服务器,因此需要明确服务器的位置。我们通过 ip地址 + 端口号 + 数据库名 来定位。ip地址是用来描述一个主机在网络上的位置的一个机制,一个主机有多个服务器程序,端口号是用来区分不同服务程序的(下载MySQL服务器默认端口号是3306),数据库名自然是用来确定所选数据库的。

程序中先是使用向上转型后又向下转型(DataSource和MysqlDataSource)。这是 Java 圈子中喜好的一种写法。

        //2.和数据库服务器,建立连接
        Connection connection = dataSource.getConnection();

这里需要导入的包需要注意是java.sql这一个。
在这里插入图片描述
这个代码会和数据库服务器之间建立连接。连接建立好了之后,就可以进行后续的通信了。

 //3.构造一个SQL
        String sql = "insert into student values (3, '张三')";
        //需要把String SQL 转换成 语句对象
        PreparedStatement statement = connection.prepareStatement(sql);
 String sql = "insert into student values (?, ?)";
        int id = 2;
        String name = "张三";
        //需要把String SQL 转换成 语句对象
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

这里的 sql 使用了?作为占位符,占位的目的是为了进行"替换"。然后使用set数据类型 的方法。

PreparedStatement 其实是指预处理过的SQL。要执行的 SQL,是需要进行语法解析的。语法解析,也是有一定开销的。通过控制台,写 SQL,都是把原始的 SQL 发送给服务器。服务器负责解析 SQL 并执行。使用 Statement也是类似,也是服务器先解析,再执行。而使用 PreparedStatement,就不一样,就可以在客户端这边,提前把 SQL 解析好,再把解析好的结果发送给服务器,服务器的解析开销就大幅度降低,直接执行即可。

注意:1.Source数据源:描述了数据库服务器在哪里 2.Connection连接:需要先建立连接,才能进行通信。基于DataSource构造出来。知道数据库服务器在哪里,才能建立连接 3.PrepareStatement语句:基于连接来生成的,当前语句对象也是要发送给服务器的

 //4.把构造好的 SQL 发送给服务器去执行
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

这里返回值为int,表示影响数据库的行数。
在这里插入图片描述
此时,代码就会构造一个网络请求,发送给 MySQL 服务器(这个代码相当于扮演MySQL客户端的角色,相当于cmd),并且会等待服务器的响应数据,把得到的响应最终显示到控制台上。

       //5.最后一步,释放必要的资源
        statement.close();
        connection.close();

当然,这两个对象内部都持有一些计算机的重要软/硬件资源,所以我们再程序最后需要释放掉这些资源。而释放的顺序,和创建的顺序是相反的。

以下是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 JDBC_Test {

    public static void main(String[] args) throws SQLException {
        //1.创建数据源,数据源描述了你要操作的数据库在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8?useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");


        //2.和数据库服务器,建立连接
        Connection connection = dataSource.getConnection();

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

        //4.把构造好的 SQL 发送给服务器去执行
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()) {
            //这个代码,就是获取“id”这一列的数值,期望得到一个 int
            int ID = resultSet.getInt("id");
            //这个代码,就是获取“name”这一列的数值,期望得到一个 String
            String NAME = resultSet.getString("name");
            System.out.println("id: " + ID);
            System.out.println("name: " + NAME );
        }

        //5.最后一步,释放必要的资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}

说明:
在这里插入图片描述
ResultSet 就是结果集合,代表了查询返回的临时表。可以类似于迭代器遍历的方式,遍历这里的每行数据。


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值