zoukankan      html  css  js  c++  java
  • 使用JDBC连接数据库的一些BUG

    题记:前几天用JDBC连接MYSQL数据库的时候,出现了一些BUG,针对于代码和设置方面进行问题的解决。

    一、出现:远程mysql_java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect

      很明显的意思就是当前数据库不允许我们进行远程连接。

      远程的机器B不允许机器A访问他的数据库。也就是说,我们要解决这个问题,就是要让机器B的数据库允许机器A访问,就搞定啦;

      立刻到cmd窗口中使用 >mysql -uroot  -proot -h192.168.1.88 -P3306 -Ddb10来连接服务器会显示错误,说明确实是无法通过远程连接到数据库的。

      【当初设置的时候没有保存截图,这里就没有放图了,但是有Err的明星错误的】

      注意:前提是使用  >mysql -uroot -proot   这条指令是可以连接到数据库的,不然就是你的环境变量或者是数据库的安装有问题了。MYSQL的安装请点击

      如下

                                                                                    

      当进入到这个界面我们就可以进行对应的解决方案了

    1.   第一步:输入  use mysql
    2.   第二步:输入 show tables;

                                                                                      

      再输入相关指令:

    •   第一步:select host from user;
    •   第二步:update user set host ='%' where user='root';
    •   第三步:select host form user;   [检查一下是否更新成功]

                                                                                                 

      然后进入计算机的服务界面,重新启动MYSQL的服务就可以了。

                                                              

      再去cmd窗口使用远程连接,进入mysql目录就可以成功了。

                                                             

    小结:当时整数据库的时候全部用了开发工具,也没有注意到该数据库是否允许远程连接的,一直都是进行本地连接,

          直到后面使用JDBC来连接数据库进行操作的时候才发现这个原因

    二、Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

      上面这个错误是因为导入的用来连接的jar包和我们当前项目的jdk版本是不一样的,导致版本不一致而出错了

                                                        

    出现问题原因-----分析 JDK版本不一致的问题 }

    •   在eclipse中开发的项目有个Java build path中可以配置的JDK
    •   java compiler中可以配置compiler level{eclipse>windows>preferences>java>compiler>compiler compliance level}

    区别

    •   build path的JDK版本是你开发的时候编译器需要使用到的,就是你在eclipse中开发代码,给你提示报错的,编译的过程;
    •   java compiler compliance level中配置的编译版本号,这个编译版本号的作用是,你这个项目将来开发完毕之后,要放到服务器上运行,那个服务器上JDK的运行版本。

      问题就是,build path中配置1.7的JDK,java compiler compliance level中配置的1.7,但是程序运行需要的是1.8的JDK,就报了那个错误。

      在eclipse中进行开发的时候,build path 中JDK进行类库的编译(就是你使用类在不在这个JDK中),

      java compiler compliance level是对这个项目语法的编译(就是你的项目中语法的正确与否),在开发的过程中,这两个地方是都起作用的。

    总结:build path 和 java complier compliance level和服务器配置的JDK保持一致,就不会出现任何问题的

      这个问题的解决方法也是很简单的,首先去查看自己的导入的jar包是在哪个jdk版本下面运行的,然后再更改我们项目的jdk版本号,或者是换用和我们一样版本号的jar包就可以解决了,

      这里我导入的是在jdk8上运行的jar包,所以我将我的项目改为jdk8的,

      查看我的项目目前的版本是:1.7的

                                                                                               

    第一步、

                                                              

    第二步、

                                                          

    第三步、

                                         

    这个时候再查看我们的项目JDK版本是1.8的了。

    3、上面是解决了由于版本不一致的情况,但是当我运行的时候,会报下面的错误:  

      Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and

      manual loading of the driver class is generally unnecessary.

                         

      这个就很简单了,白问翻译过来都知道了,就是要换用新的类了,将使用com.mysql.jdbc.Drive的换为com.mysql.cj.jdbc.Driver即可,这是由于我当前使用的是最新的jdbc驱动包,里面的API有跟新了

    4、当我把API换为新的了,但是运行的时候又出错了,这回的错是:

      Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone.

      You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

                         

      仔细阅读,发现是与时间设置相关,仔细研究后发现,是因为新版的Mysql中的时区默认设置与本地时区之间是不同的,因此会报错。

      解决方法即为修改时区设置即可,可以在连接数据库的url的最后添加这样一段代码 ?serverTimezone=UTC ,就可以解决问题了。

      事例:

      原来报错的:String url = "jdbc:mysql://176.129.8.53:3306/db10";

      改正后的:String url = "jdbc:mysql://176.129.8.53:3306/db10?serverTimezone=UTC"; 

    总结:

    这是对使用MYSQL的JDBC驱动包进行数据库的操作的时候总结出来的一些解决方案,

    然后分享出来自己当时的一步一步的解决步骤,肯定是不全的,但是就目前而言是可以解决一大部分的错误的了。

                                                                                                                                2019-03-09 13:46:08

  • 相关阅读:
    2020.11.6
    2020.7.15小日记
    P1536 村村通
    P1510 精卫填海
    P1020 导弹拦截
    P1164 小A点菜
    5.17练习总结
    P1135 奇怪的电梯
    P1101 单词方阵
    P1443 马的遍历
  • 原文地址:https://www.cnblogs.com/zhh19981104/p/10500151.html
Copyright © 2011-2022 走看看