关于MySQL8.0.11连接JDBC代码及连接Hibernate-5.3.1.Final时Hibernate.cfg.xml文件的写法遇到的问题及解决过程

CSDN上的第一篇博客,研究了一下午加一晚上终于找到问题并解决问题。

第一个问题:

最近复习mysql数据库相关内容,去官网下载MySQL发现出了个MySQL8.0.11版本,头铁去下了个来用,然后发现JDBC连接数据库时报错(已下载对应的mysql-connector-java-8.0.11.jar),各种百度后总结应注意以下两点:

1.注册驱动时Driver类的全限定性类名为:com.mysql.cj.jdbc.Driver,即:

Class.forName("com.mysql.cj.jdbc.Driver");


2.mysql8的url需要追加参数,否则无法连接,会报错;

需要将SSL手动关闭,并且将服务器时区设置为UTC,即:

String url = "jdbc:mysql://localhost:3306/zhengyang?useSSL=false&serverTimezone=UTC";


最终JDBC连接数据库代码如下:

package com.zhengyang.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCTest11 {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//连接数据库
			String url = "jdbc:mysql://localhost:3306/zhengyang?useSSL=false&serverTimezone=UTC";
			String user = "root";
			String password = "1111";
			conn = DriverManager.getConnection(url, user, password);
			//关闭自动提交,开启事务
			conn.setAutoCommit(false);
			//定义SQL语句,事务只与DML语句有关
			String sql = "delete from t_user where id = ?";
			//预编译
			ps = conn.prepareStatement(sql);
			//赋值
			ps.setInt(1, 1);
			//执行SQL语句
			int count = ps.executeUpdate();
			System.out.println(count);
			//提交事务
			conn.commit();
		} catch (Exception e) {
			//回滚事务
			try {
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}finally{
			//关闭资源
			if(ps != null){
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

该问题通过这位同学的博客解决:https://blog.csdn.net/beyond9305/article/details/80330125 (表示感谢)


============================================================================

============================================================================


第二个问题:

MySQL8.0.11连接Hibernate-5.3.1.Final时Hibernate.cfg.xml文件的写法问题

刚开始按照连接JDBC时的写法将Hibernate.cfg.xml文件中的URL写成

        jdbc:mysql://localhost:3306/oa?useSSL=false&serverTimezone=UTC

发现运行后报错:

“Message: 对实体 "serverTimezone" 的引用必须以 ';' 分隔符结尾。”

各种百度后才找到原因:

xml文件中有些特殊字符是被禁止的,而‘&’就是其中一个,如果要想使用它,需要用到它的转义字符"&"

所以URL应写为:



    jdbc:mysql://localhost:3306/oa?useSSL=false&serverTimezone=UTC

还有在设置dialect时,应注意选择MySQL8Dialect.class,而不是MySQLDialect.class, 即:


	org.hibernate.dialect.MySQL8Dialect

最后Hibernate.cfg.xml文件的写法为:



	




	
		com.mysql.cj.jdbc.Driver
	
	
		jdbc:mysql://localhost:3306/oa?useSSL=false&serverTimezone=UTC
	
	root
	1111
	
	
	org.hibernate.dialect.MySQL8Dialect
	
	
	org.hibernate.c3p0.internal.C3P0ConnectionProvider
	
	
	thread
	
	
	update
	
	
	true
	
	
	true
	
	
	



关于MySQL8连接hibernate的问题目前在百度上很少,可能因为版本太新吧(至少我在2018年6月3日查找是没能找到),所以自己写了这一篇来解决MySQL8的连接问题。


你可能感兴趣的:(Hibernate)