一文搞懂JDBC应该怎么用,附代码实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 说到Java的常见框架,JDBC一定是榜上有名。虽然大多数人会使用Mybatis来做Java应用和MySQL之间的数据交互,但了解JDBC依然是一个Java工程师的基本功。本篇文章,就来介绍一下JDBC这个框架,最后内会附上代码实例。

说到Java的常见框架,JDBC一定是榜上有名。

虽然大多数人会使用Mybatis来做Java应用和MySQL之间的数据交互,但了解JDBC依然是一个Java工程师的基本功。

本篇文章,就来介绍一下JDBC这个框架,最后内会附上代码实例。

v2-bbe7a2f8368c21a7fb6480f1a13cdeef_720w.jpg


1. 准备工作

1.1 下载安装JDK和IDEA

这应该是Java基础中的基础了,就不做详细展开了,有需要的小伙伴可以留言沟通。

1.2 下载mysql-connector-j

JDBC,是Java DataBase Connectivity的首字母缩写,它是MySQL对各个平台、语言的驱动程序,具体文件包可以从MySQL的官网下载:https://dev.mysql.com/downloads/

我们学习java,需要下载和安装的自然是java的版本——connector/j:
1_r.jpg

点击图中相应链接,在新页面中,运行系统选择Ubuntu Linux
2_r.jpg

在刷新后的页面中,选择合适的安装包:
3.jpg

重要说明: 下载版本不是越新越好,新版本可能会存在兼容和解压问题,如果遇到打不开,可以换另外几个版本 DEB Package试试。

1.3 下载mysql-connector-j

我们之后会用到的JDBC框架就在这个mysql-connector-j的安装包里。

用解压工具,将jar包解压,找到该路径下的文件./data.jar/./usr/share/java/mysql-connector-j-8.0.xx.jar

将该路径下的mysql-connector-j-8.0.xx.jar文件复制到java项目下即可。

一般我们会在项目根目录下新建一个"lib"文件夹,将 mysql-connector-j-8.0.xx.jar包拷贝到该文件夹下。

1.4 引用绑定jdbc

本例以IDEA编译器的配置为例,其它平台的引用绑定,我会在后续的文章里逐步更新。有需要的小伙伴可以先关注我哦!

在IDEA中新建项目后,在菜单栏里选择File->Project Structure
4.jpg

依上图逐个点击按钮,点击JARs or Directories,打开资源管理器窗口,找到我们刚才从MySQL官网下载下来的mysql-connector-j-8.0.xx.jar,点击确定完成引用和绑定。

1.5 MySQL数据库

这里仅作为提示:后续的内容是建立在配置好MySQL数据库的基础上。

由于MySQL本身就是一项独立技术,所以在此不展开介绍。

有需要的话,我会在后续的文章介绍MySQL,或者专门开辟一个关于MySQL知识分享的专栏,大家可以关注一下。


2. 代码实现

2.1 基本逻辑实现

完成了上述准备工作,我们就可以开始落实代码了。

JDBA的使用,本质上和I/O文件读写的逻辑是一致的:

  1. 实例化驱动和数据库连接
  2. 查询对象
  3. 关闭连接

在IDEA项目中,新建一个文件,并将下述代码复制进去,运行学习:

import java.sql.*;

public class JDBCDemo {
    public static void main(String[] args) {
        // 1. 实例化资源
        // 1.1 注册JDBC驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 1.2 创建数据库连接实例
        String url = "jdbc:mysql://localhost:3306/database?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String user = "root";
        String pswd = "root";
        Connectionconn = DriverManager.getConnection(url, user, pswd);

        // 2. 查询对象
        // 2.1 实例话查询声明,以及查询语句
        Statement st = conn.createStatement();
        String query = "select * from table1";
        ResultSet rs = st.executeQuery(query);
        // 2.2. 查询结果
        while (rs.next()) {
            int uid = rs.getInt(1);
            System.out.println(uid);
        }
        // 3. 关闭连接,释放资源
        conn.close();
    }
}

说明

  • 上例中的url、user、pswd是连接数据库的参数,分别是路径、用户名、密码;
  • 稍微对上例中的url(数据库路径)的语法做一下解释:驱动名:SQL方言名://服务器:端口号/数据库名?连接参数,一般连接参数按照上例写即可;
  • String query是MySQL查询语句,请结合自己的MySQL数据库编写查询语句。

2.2 完整代码实现

上例中的代码,没有做异常处理,为的是减低代码的阅读难度,帮助小伙伴理清JDBC实例的脉络,完整代码应该是这样的:
import java.sql.*;

public class JDBCDemo {
    public static void main(String[] args) {
        Connection conn = null;

        try {
            // 1. 实例化资源
            // 1.1 注册JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 1.2 创建数据库连接实例
            String url = "jdbc:mysql://localhost:3306/database?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
            String user = "root";
            String pswd = "root";
            conn = DriverManager.getConnection(url, user, pswd);

            // 2. 查询对象
            // 2.1 实例话查询声明,以及查询语句
            Statement st = conn.createStatement();
            String query = "select * from table1";
            ResultSet rs = st.executeQuery(query);
            // 2.2. 查询结果
            while (rs.next()) {
                int uid = rs.getInt(1);
                System.out.println(uid);
            }
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        } finally {
            // 3. 关闭连接,释放资源
            try {
                if (conn != null & !conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

说明

finally代码块中的if判断,是避免conn空指针异常导致关闭连接失败的情况。

2.3 防SQL注入攻击

不过,上述代码会有一定风险,可能会有SQL注入攻击的风险。

为了避免SQL注入攻击的风险,我们只需要做一个调整即可,详见下例:

import java.sql.*;

public class JDBCDemo {
    public static void main(String[] args) {
        Connection conn = null;

        try {
            // 1. 实例化资源
            // 1.1 注册JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 1.2 创建数据库连接实例
            String url = "jdbc:mysql://localhost:3306/database?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
            String user = "root";
            String pswd = "root";
            conn = DriverManager.getConnection(url, user, pswd);

            // 2. 查询对象
            // 2.1 实例话查询声明,以及查询语句
            String query = "select * from table1";
            PreparedStatement st = conn.prepareStatement(query);
            ResultSet rs = st.executeQuery(query);
            // 2.2. 查询结果
            while (rs.next()) {
                int uid = rs.getInt(1);
                System.out.println(uid);
            }
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        } finally {
            // 3. 关闭连接,释放资源
            try {
                if (conn != null & !conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

说明

  • 在这里,我们将Statement st = conn.createStatement();更改为PreparedStatement st = conn.prepareStatement(query);即可;
  • PreparedStatementStatement的子类,但它会对传入的查询语句进行解析,然后再向数据库发起请求,从而避免SQL注入攻击的风险。

关于JDBC的知识点和实例演示就先分享到这里。

感谢你看到这里。如果你对分享的内容有任何疑问,欢迎随时在评论区留言交流。
v2-f05b0b4af6d36e795020cd99f3576e5e_r.jpg

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL Java 数据库连接
JDBC基础入门与常用实例详解
JDBC基础入门与常用实例详解
141 0
|
SQL Java 数据库连接
JDBC系列--template实例练习
JDBC系列--template实例练习
85 0
|
SQL NoSQL Java
Spring Boot 整合 JDBC Template 实例
Spring Boot 整合 JDBC Template 实例
149 0
Spring Boot 整合 JDBC Template 实例
|
存储 SQL Java
JDBC简介及实例
JDBC简介及实例
140 0
JDBC简介及实例
|
SQL 缓存 druid
Spring之路(29)–Spring JDBC多种数据源DataSource配置实例
本文目录 1. 何为数据源 2. 数据源实现 3. 使用数据源 4. 不同的数据源类 5. 连接池功能的数据源 6. Druid配置与使用
1197 1
|
SQL Java 关系型数据库
fbh
|
SQL Java 关系型数据库
JDBC数据源连接池的配置和使用实例
个人学习参考所用,勿喷!   使用JDBC建立数据库连接的两种方式: 1.在代码中使用DriverManager获得数据库连接。
fbh
1177 0
|
30天前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
121 1