Java连接mysql
遇到的问题:
- 因为MySQL装的是8.0版本,对应的驱动也要装成8.0版本以上的。若用5.x的版本就会报错
- 装好新的驱动之后,要注意在URL中添加useSSL=false&serverTimezone=GMT%2B8, 用&隔开。
MySQL默认的数据通道是不加密的,在一些安全性要求特别高的场景下,我们需要配置MySQL端口为SSL,使得数据通道加密处理,避免敏感信息泄漏和被篡改。
serverTimezone是用来设置时区的,GMT%2B8设置为了东八区。但是这个设置对我来说,本意是解决了字符串乱码的问题,有点迷。
代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class main {
public static void main(String[] args) {
try {
// The newInstance() call is a work around for some
// broken Java implementations
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("加载成功");
} catch (Exception ex) {
System.out.println("加载失败");
// handle the error
}
try {
//Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_01?","root", "lwx18993114039");
String url = "jdbc:mysql://localhost:3306/test_01?&useSSL=false&serverTimezone=GMT%2B8";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "123456";
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println("连接成功");
PreparedStatement ps = conn.prepareStatement("select * from emp;");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
String name = rs.getString("ename");
int num = rs.getInt("empno");
System.out.print(num+"\t"+name);
System.out.println("");
}
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
System.out.println("连接失败");
}
}
}```
输出:
加载成功
连接成功
6060 李华
7369 张三
7698 王五