使用JDBC实现Java代码连接MySQL

目录

一、下载驱动包并导入

 二、添加Maven依赖

三、修改MySQL密码

 四、JDBC驱动名、URL的写法

 五、开始连接

六、连接成功

七、连接方法和流程


在连接过程中遇到了n多问题,各种异常碰了个遍,网上教程太杂太老,所以决定写个复盘。

一、下载驱动包并导入

Java 连接 MySQL 需要驱动包,最新版下载地址为:MySQL :: Download Connector/J。解压后得到 jar 库文件,然后打开文件 -> 项目解构 -> 模块 -> 依赖,将.jar包导入。

 二、添加Maven依赖

接着在pom.xml文件中添加Maven依赖:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
</dependency>

三、修改MySQL密码

需要将密码修改到使用命令行不用加“sudo”也能登陆为止,只需修改一次密码就可以了。

网上很多教程都很老了(可能也就三年前两年前的教程就已经不管用了),输入会报SQL语法错误。目前可行的办法参考:https://www.jianshu.com/p/a4365ab7208c

设置完成后登陆MySQL应该是这个样子: 

不用加sudo就可以登陆

看看我数据库的结构,这是库们:

 选择testmysql库 ,这是里面的两个表:

 我等等要操作的是EMPLOYEES表下的这前三个列:

 四、JDBC驱动名、URL的写法

这个迭代性也好高,MySQL8.0版本的驱动名和URL如下(也是找了好久才正确):

驱动名
com.mysql.cj.jdbc.Driver
URL
jdbc:mysql://localhost:3306/表名?列名=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

 五、开始连接

现在我们尝试使用JDBC连接代码和数据库,来列出我的数据库中指定表的数据。以下是相关代码:

package jdbc;

import java.sql.*;

public class JDBCTest {
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/testmysql?EMPLOYEES=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true ";

    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // 执行查询
            System.out.println("实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            // 这一步很关键 SELECT后面需要加正确的列名 FROM后面是表名
            sql = "SELECT EMP_ID, NAME, DEPARTMENT FROM EMPLOYEES";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int EMP_ID  = rs.getInt("EMP_ID");
                String NAME = rs.getString("NAME");
                String DEPARTMENT = rs.getString("DEPARTMENT");

                // 输出数据
                System.out.print("ID: " + EMP_ID);
                System.out.print(", 站点名称: " + NAME);
                System.out.print(", 站点 URL: " + DEPARTMENT);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

这串代码我调了好久,稍微不注意就会抛出异常退出程序。需要注意的点主要是下面这三块:

  1. 要写对驱动名和数据库URL,尤其是URL(表名?列名)
  2.  SELECT 列名选项们  FROM 表名
  3. get...方法获得相对应列的数据

六、连接成功

我们排除万难之后终于构建成功,运行并输出数据库中的指定数据: 

 

七、连接方法和流程 

注册驱动
Class.forName(驱动名)
连接数据库
DriverManager.getConnection(URL,用户名,密码)

接下来将数据库中的数据实例化对象,然后再使用相对应的操作即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜 然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值