当前位置: 首页 > news >正文

【JDBC】JDBC常见错误处理方法及驱动的加载

MySQL8中数据库连接的四个参数有两个发生了变化

          String driver = "com.mysql.cj.jdbc.Driver";

String url = "jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";

          或者String url = ".......serverTimezone=GMT%2B8";

错误1:Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc2.Driver

原因:没有添加jar包或者com.mysql.jdbc2.Driver路径错误

错误2:Exception in thread "main" java.sql.SQLException:

No suitable driver found for jbdc:mysql://127.0.0.1:3306/stumgr

原因:url错误

 

错误3:Exception in thread "main" java.sql.SQLException:

Access denied for user 'root'@'localhost' (using password: YES)

原因:用户名或者密码错误

  错误4:Exception in thread "main" com.mysql.jdbc.exceptions

.jdbc4.MySQLIntegrityConstraintViolationException:Duplicate entry '90' for key 'PRIMARY'

原因:主键冲突

错误5:Public Key Retrieval is not allowed

如果用户使用 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启

在jdbc连接添加上参数allowPublicKeyRetrieval=true即可,注意参数间用&

驱动的加载

加载数据库驱动时,我们可以通过自己创建一个实例的方式,然后去注册驱动

在查看Driver的源代码时我们发现,该类内部有一个静态代码块,在代码块中就是在实例化一个驱动并在驱动中心注册.静态代码块会在类进入内存时执行,也就是说,我们只要让该类字节码进入内存,就会自动完成注册,不需要我们手动去new

 

所以我们在代码中直接使用反射,通过Class.forName("com.mysql.jdbc.Driver"),加载该类进入内存即可

      我们继续查看jar包发现,jar包中已经默认配置了驱动类的加载

jar--META-INF--services--java.sql.Driver--com.mysql.jdbc.Driver,在加载jar包时,会自动读取该内容并加载驱动,所以我们不去编写Class.forName("com.mysql.jdbc.Driver"),程序也是可以自动完成加载驱动的

结合异常处理代码

  1. package com.msb.test1;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6. /**
  7.  * @Author: Ma HaiYang
  8. * @Description: MircoMessage:Mark_7001
  9. */
  10. public class TestJDBC3 {
  11.     private static String driver ="com.mysql.cj.jdbc.Driver";
  12.     private static String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
  13.     private static String user="root";
  14.     private static String password="root";
  15.     public static void main(String[] args)  {
  16.         Connection connection=null;
  17.         Statement statement=null;
  18.         try{
  19.             Class.forName(driver);
  20.             connection =DriverManager.getConnection(url, user,password);
  21.             statement = connection.createStatement();
  22.             String sql="insert into dept values(DEFAULT ,'助教部门','北京');";
  23.             int rows = statement.executeUpdate(sql);
  24.             System.out.println("影响数据行数为:"+rows);
  25.         }catch (Exception e){
  26.             e.printStackTrace();
  27.         }finally {
  28.             if(null != statement){
  29.                 try {
  30.                     statement.close();
  31.                 } catch (SQLException e) {
  32.                     e.printStackTrace();
  33.                 }
  34.             }
  35.             if(null != connection){
  36.                 try {
  37.                     connection.close();
  38.                 } catch (SQLException e) {
  39.                     e.printStackTrace();
  40.                 }
  41.             }
  42.         }
  43.     }
  44. }

相关文章:

  • C语言:在 Win 10 上,g++ 如何编译 gtk 应用程序
  • linux网络内核的核心函数作用和简介
  • 手写tomcat:基本功能实现(3)
  • Java IO流进阶实战详解(含文件读写、拷贝、加密、字符集)
  • R语言空间数据处理入门教程
  • BC 范式与 4NF
  • AI日报 - 2024年5月17日
  • 【React中虚拟DOM与Diff算法详解】
  • 日期数据渲染转换问题
  • Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
  • C++高级应用(1)-类型擦除(Type Erasure)和模板特化(Template Specialization)详解
  • aksharetools:大模型智能体框架agno可直接获取A股金融数据
  • [Mac] 开发环境部署工具ServBay 1.12.2
  • React Hooks 必须在组件最顶层调用的原因解析
  • 【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中
  • Spring Boot 项目的计算机专业论文参考文献
  • 创建react工程并集成tailwindcss
  • React中useState中更新是同步的还是异步的?
  • 文件读取漏洞路径与防御总结
  • c++重要知识点汇总(不定期更新)
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 终于,俄罗斯和乌克兰谈上了
  • 习近平在第三十五个全国助残日到来之际作出重要指示
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 习近平向多哥新任领导人致贺电
  • 7月纽约举办“上海日”,上海大剧院舞剧《白蛇》连演三场