目录
在连接过程中遇到了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应该是这个样子:
看看我数据库的结构,这是库们:
选择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!");
}
}
这串代码我调了好久,稍微不注意就会抛出异常退出程序。需要注意的点主要是下面这三块:
- 要写对驱动名和数据库URL,尤其是URL(表名?列名)
- SELECT 列名选项们 FROM 表名
- get...方法获得相对应列的数据
六、连接成功
我们排除万难之后终于构建成功,运行并输出数据库中的指定数据:
七、连接方法和流程
注册驱动 | Class.forName(驱动名) |
连接数据库 | DriverManager.getConnection(URL,用户名,密码) |
接下来将数据库中的数据实例化对象,然后再使用相对应的操作即可。