从 Linux 上的 NetBeans 中的 Java 应用程序连接到 MariaDB (Mageia)

2022-09-03 09:51:19

我正在尝试通过一个简单的java应用程序连接到Mariadb中的数据库,但连接被告知不成功并引发异常。我已经使用mysql完成了类似的连接,并且它工作正常。问题可能出在司机这里。

 try{
          Class.forName("org.mariadb.jdbc.Driver");  

        Connection connection = DriverManager.getConnection(  
                "jdbc:mariadb://localhost:3306/project", "root", "");  
        Statement statement = connection.createStatement(); 

        String uname="xyz",pass="abc";
       statement.executeUpdate("insert into user values('"+uname+"','"+pass+"')");}//end of try block

我在互联网上查找了帮助,并获得了MariaDB客户端库提供的Java应用程序驱动程序类,该驱动程序不是com.mysql.jdbc.Driver,而是org.mariadb.jdbc.Driver!我相应地更改了它,但似乎问题出在尝试块内的第一行。驱动程序根本没有加载。另外,我已经将mysql jar文件添加到我的java应用程序的库中,如下面的屏幕截图所示。请帮帮我度过这个难关。enter image description here


答案 1

您似乎正在尝试使用 MySQL JDBC 驱动程序与 MariaDB 服务器实例建立连接。这可能不起作用,因为MySQL JDBC驱动程序将使用,无论它是连接到MySQL服务器还是MariaDB服务器。也就是说,连接字符串必须与正在使用的驱动程序匹配(而不是与正在访问的数据库服务器)匹配。jdbc:mariadb://...jdbc:mysql://...

MySQL和MariaDB驱动程序应该在某种程度上可以互换,但是在访问MariaDB服务器时使用MariaDB连接器似乎只是谨慎的。就其价值而言,组合mariadb-java-client-1.1.7.jar

projectProperties.png

Connection con = DriverManager.getConnection(
        "jdbc:mariadb://localhost/project", 
        "root", 
        "whatever");

为我工作。我从这里下载了Java的MariaDB客户端库:

https://downloads.mariadb.org/client-java/1.1.7/

我通过

https://downloads.mariadb.org/

附加说明:

  1. Java 代码中不需要语句。Class.forName()

  2. Mageia 下的 MariaDB 的默认配置可能包括 中的指令。如果要通过 JDBC 连接到数据库,则需要删除(或注释掉)该指令,因为 JDBC 连接始终看起来像 MySQL/MariaDB 的“网络”连接,即使它们是来自 的连接。(您可能还需要将值调整为类似的东西。skip-networking/etc/my.cnflocalhostbind-address0.0.0.0


答案 2

另外一个注意事项:探索MariaDB JDBC驱动程序,我在url解析文件中发现了这个:

Project: https://github.com/MariaDB/mariadb-connector-j.git
File: src/main/java/org/mariadb/jdbc/UrlParser.java

public static UrlParser parse(final String url, Properties prop) throws SQLException {
....
        if (url.startsWith("jdbc:mysql:")) {
            UrlParser urlParser = new UrlParser();
            parseInternal(urlParser, url, prop);
            return urlParser;
        } else {
            if (url.startsWith("jdbc:mariadb:")) {
                UrlParser urlParser = new UrlParser();
                parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
                return urlParser;
            }
        }    

如您所见,字符串始终在内部替换为。因此,当涉及到MariaDB驱动程序时,无论是:mariadb:还是:mysql:它总是被解析为."jdbc:mariadb:""jdbc:mysql:""jdbc:mysql:"

没有区别。

if (url.startsWith("jdbc:mariadb:")) {
    ....
    parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
    ....

推荐