首次使用JDBC8.0 遇到以下两个主要问题(坑)
一、com.mysql.cj.jdbc.Driver
JDBC8.0不同于之前版本
JDBC_DRIVER = "com.mysql.jdbc.Driver";
**增加 ’ .cj ’ **
JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
二、URL
jdbc:mysql://localhost:3306/sql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
在你的表名后面加上
?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
ok,正常运行。
附源码:
import java.sql.*;
public class MysqlDemo {
// JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/sql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "root";
static final String PASS = "admin";
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;
sql = "SELECT driver_id,driver_name,driver_address FROM driver";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
// 通过字段检索
int driver_id = rs.getInt("driver_id");
String driver_name = rs.getString("driver_name");
String driver_address = rs.getString("driver_address");
// 输出数据
System.out.print("Driver_id " + driver_id);
System.out.print("Driver_name " + driver_name);
System.out.print("Driver_address " + driver_address);
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!");
}
}