JDBC连接本地数据库更新数据时报错
2021/7/6 16:23:40
初学JDBC连接数据库时,遇到几个问题,总结更新一下,以免初学者踩坑,更是为了一起交流学习!!!
废话不多,上代码…
这是一个通过JDBC更新本地数据库数据的简单测试代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/*
通过JDBC连接数据库,实现更新数据
*/
public class JDBC_Rumen {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
/*
驱动管理对象,DriverManager
注册驱动、获取数据库连接对象
*/
//导入驱动jar包,注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取数据库连接对象
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root用户","本机MySQL密码");
//定义sql
String sql = "insert into student(sid,sname,sex,avgsco) values(2019321215,'wuzhe','n',88.5)";
//获取执行sql语句对象
stmt = conn.createStatement();
//执行sql语句
int n = stmt.executeUpdate(sql);
//处理结果
if (n > 0){
System.out.println("执行成功!");
}else{
System.out.println("执行失败!");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
本以为程序会执行成功,正常更新数据
But…
从报错信息中隐约看出是字符集的问题,经过搜索,应该是驱动jar包和本机mysql字符集不匹配,于是我又从网上下载了几个其他的驱动jar包,但是依旧没有解决问题。最后通过在url中指定字符集解决了问题。
修改代码
//获取数据库连接对象
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8","root用户","本机MySQL密码");
再次运行便执行成功啦!
另外还可能出现的问题:
Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException
这是因为新版MySQL通过JDBC连接时需要添加时区.
解决方案:同样是在url中添加上时区:
?serverTimezone=UTC &&useSSL=false
问题就解决啦。
欢迎大家评论指正!