使用8.0版本jdbc驱动连接数据库操作
转自:https://blog.csdn.net/qq_41734885/article/details/80562815
首先,我居然不能用navicat客户端连接上mysql8.0数据库报1251错误,这个的解决方式已经在我的上一篇博客中解决了。然后我又遇到了java无法连接mysql数据库8.0的问题。
报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Wed May 09 16:25:23 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
上面这段报错中加粗的文字很重要,她告诉你mysql8.0和之前版本的区别,首先驱动换了,不是com.mysql.jdbc.Driver而是'com.mysql.cj.jdbc.Driver',此外mysql8.0是不需要建立ssl连接的,你需要显示关闭。最后你需要设置CST。所以我们需要在之前我们熟悉的java连接数据库代码的基础之上改动以下两行代码:
Class.forName("com.mysql.cj.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?useSSL=false&serverTimezone=UTC","root","password"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo","root","password");
Class.forName("com.mysql.cj.jdbc.Driver"); // Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?useSSL=false&serverTimezone=UTC","root","password"); // conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo","root","password");
import java.sql.*; public class Main { public static void main(String[]args) throws Exception{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC","root","123456"); String sql1="select * from book"; PreparedStatement pst=conn.prepareStatement(sql1); /* 查询 */ ResultSet rs=pst.executeQuery(sql1); while (rs.next()){ System.out.println(rs.getString("id")+" "+rs.getString("bookno")+" "+rs.getString("bookname")+" "+rs.getString("author")); } /* 插入 */ String sql2="insert into book(id,bookno,bookname,author,press,price)values(4,'book4','sean4','author4','press4',400)"; pst.executeUpdate(sql2); /* 删除 */ String sql3="delete from book where id=2"; pst.executeUpdate(sql3); /* 修改 */ String sql4="update book set price=500 where id=4"; pst.executeUpdate(sql4); pst.close(); rs.close(); } }