当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从Linux上的NetBeans(Mageia)中的Java应用程序连接到MariaDB》经验,为你挑选了2个好方法。

我试图通过一个简单的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 Client Library for Java Applications提供的驱动程序类不是com.mysql.jdbc.Driver而是org.mariadb.jdbc.Driver!我相应地改变了它,但似乎问题在于try块内的第一行.驱动程序根本没有加载.另外,我已经将mysql jar文件添加到我的java应用程序的库中,如下面的屏幕截图所示.请帮我解决这个问题.在此输入图像描述



1> Gord Thompso..:

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

MySQL和MariaDB驱动程序应该是可以互换的,但在访问MariaDB服务器时使用MariaDB连接器似乎是谨慎的.对于它的价值,它的组合mariadb-java-client-1.1.7.jar

projectProperties.png

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

为我工作.我从这里下载了MariaDB Client Library for Java:

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

我通过它到达

https://downloads.mariadb.org/

补充说明:

    Class.forName()您的Java代码中不需要声明.

    Mageia下的MariaDB的默认配置可能包含skip-networking指令/etc/my.cnf.如果要通过JDBC连接到数据库,则需要删除(或注释掉)该指令,因为JDBC连接始终看起来像是与MySQL/MariaDB的"网络"连接,即使它们是来自的连接localhost.(您可能需要将bind-address值调整为类似的值0.0.0.0.)



2> Basil Musa..:

另外需要注意:探索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;
            }
        }    

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

没有不同.

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

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有