怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

序欢迎来到全网最完整的Java系列教程!!! 本教程将包含基础知识、进阶知识、常用框架等,循序渐进地分享Java中必须掌握的知识和技术。跟着老K

欢迎来到全网最完整的Java系列教程!!!

本教程将包含基础知识、进阶知识、常用框架等,循序渐进地分享Java中必须掌握的知识和技术。跟着老K的教程每天学习一点,你会发现入门Java没有想象中那么难。

说到Java的常见框架,JDBC一定是榜上有名。虽然大多数人会使用mybatis来做Java应用和MySQL之间的数据交互,但了解JDBC依然是一个Java工程师必备的基本功。

本期教程内容,我们就要通过实战,向大家介绍一下JDBC这个框架。

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

如果你正在学习Java,不妨收藏这篇文章,或者关注我,定期收获与Java有关的知识和项目信息!


1. 准备工作

1.1 下载安装JDK和IDEA

这应该是Java基础中的基础了,就不做详细展开了,有需要的小伙伴可以到我之前的文章了解相关知识:

全网最完整的免费java教程讲义(一)——java配置和安装

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

1.2 下载mysql-connector-j

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

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

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

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

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

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

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

重要说明: 下载版本不是越新越好,新版本可能会存在兼容和解压问题,如果遇到打不开,可以换另外几个版本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

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

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

1.5 MySQL数据库

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

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

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


2. 代码实现

2.1 基本逻辑实现

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

JDBA的使用,本质上和我之前I/O文件读写的逻辑是一致的,可以参考:「Java进阶」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的知识点和实例演示就先分享到这里。

本期的内容较多,建议可以收藏这篇文章,多读几遍慢慢消化。

如果你对老K分享的内容有任何疑问,欢迎随时在评论区留言或者私信我。

正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力!

怎么使Java和MySQL数据通信?JDBC应该怎么用?| Java常用框架(一)

阅读推荐

我也分享过关于如何学习Java的文章,有需要的小伙伴可以点击下方链接获取:

IT大佬推荐!学习Java的最优路径 分享多个阶段的学习资源 建议收藏

结束语

我是专注于开发领域的@老K玩代码,会持续生产关于如何学习编程语言的优质内容。

如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。

如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。

#头条创作挑战赛#

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/5327.html

(0)
上一篇 2022-12-13 21:21
下一篇 2022-12-13 21:21

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信