使用的MySQL 8.0版本 ,首先导入JAR包 右键new一个libs的packdge ,把下载好的mysql-connector-java-8.0.13.jar粘贴到libs包中,右键Build Path选择的Add buildpath 就会在下面生成referenced libs ,同理删除jar包右键Build Path,选择Configure Build path选择romove即可。
第一种错误:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
这个错误是由驱动和数据库版本不一致造成的。
我的数据库是mysql8.0但是使用了mysql-connector-java-5.1.38.jar这个驱动。所以会报这个错误。
解决方法:
将驱动替换为相应mysql8.0版本的驱动。
我的驱动是mysql-connector-java-8.0.13.jar 将它替换掉原来的驱动即可。
从这个连接里面下载8.X的驱动即可https://blog.csdn.net/weixin_41804049/article/details/87719574
然后还需修改第二个地方:
将com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver即可
第二种错误:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time
提示系统时区出现错误,可以在mysql中执行命令:
set global time_zone=’+8:00’
或者在url 中添加 serverTimezone=UTC
如果只是第一个参数,应写成
url = “jdbc:mysql://localhost:3306/qlgydx?serverTimezone=GMT”
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class DjbcDemo1 { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //1.导入驱动jar包 //2.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("数据库驱动加载成功!"); //3.获取数据库的连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?serverTimezone=GMT", "root", "123456"); System.out.println("数据库连接成功!"); //4.定义sql语句 String sql ="update stu set balance =500 where id =1"; //5.获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //6.执行sql int count = stmt.executeUpdate(sql); //7.处理结果 System.out.println(count); //8.释放资源 stmt.close(); conn.close(); } }
下面还出现了一堆红字 我还以为是又报错了呢 = =
数据库驱动加载成功! 数据库连接成功! 1 Fri Jul 24 16:17:54 CST 2020 WARN: Caught while disconnecting... EXCEPTION STACK TRACE: ** BEGIN NESTED EXCEPTION ** javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer's close_notify STACKTRACE: javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133) at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:311) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258) at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:801) at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:780) at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1312) at com.mysql.cj.NativeSession.quit(NativeSession.java:182) at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750) at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720) at jdbc.DjbcDemo1.main(DjbcDemo1.java:28) ** END NESTED EXCEPTION **
之前id=1 的balance=1000
现在在JAVA中更改了update的语句后查看是否变成了500
成功(●'◡'●)