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