无法使用MySQL作为驱动程序在MariaDB中执行查询

时间:2013-09-06 07:04:29

标签: java mysql mariadb

我正在测试一个连接到DB并获取my_test表详细信息的简单程序。

我的异常为java.sql.SQLException: Unable to load authentication plugin.

堆栈跟踪

java.sql.SQLException: Unable to load authentication plugin ''.
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:923)
        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1715)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:221)
        at TestRoot.main(TestRoot.java:19)

我使用Driver作为MySQL。 我的数据库是mariadb-5.5.30。

      Connection con=null;
      Statement st=null;
      ResultSet rs=null;
      String firstName="";
      try
      {
              Class.forName("com.mysql.jdbc.Driver");

              con=DriverManager.getConnection("jdbc:mysql://localhost:3306/my_test","root","");
              st=con.createStatement() ;
              rs=st.executeQuery("SELECT * FROM test") ;
              while(rs.next())
              {
                      firstName=rs.getString(2);
                      System.out.println(firstName);
              }

      }
      catch(Exception err)
      {
              System.out.println(err.toString());
      }

我知道Connection,ResultSet没有关闭,但我认为这不是问题的原因。

2 个答案:

答案 0 :(得分:1)

您可以在此处查看:https://mariadb.atlassian.net/browse/MDEV-3935

  

当mysql.user表上设置的密码使用时,会出现问题   旧格式 - 格式为7f84554057dd964b(我相信是   'badpwd')而不是像   * AAB3E285149C0135D51A520E1940DD3263DC008C是较新的表格。

     

重置MDEV-545中记录的用户记录密码   确实解决了问题,因为它升级了表格中的密码格式。


来自MariaDB文档:https://mariadb.com/kb/en/pam-authentication-plugin/

  

注意:Windows不使用PAM,因此PAM身份验证插件在Windows上不起作用。但是,可以使用Windows客户端连接到MariaDB服务器 - 例如,在Linux或Solaris上 - 它使用PAM身份验证插件。见这个例子。

根据我的理解,你应该在linux上安装它(阅读上一个链接中的文档)

答案 1 :(得分:0)

我遇到了同样的问题并设法通过更改jdbc驱动程序来修复它。我使用了MariaDB jdbc驱动程序:

(来自Spring配置文件)

希望这会有所帮助。