首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NetBeans on Linux (Mageia)的Java应用程序连接到MariaDB

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

Stack Overflow用户
提问于 2014-04-12 03:15:39
回答 2查看 69.3K关注 0票数 15

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

代码语言:javascript
复制
 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!我做了相应的修改,但似乎问题出在try块内的第一行。驱动程序根本未加载。此外,我已经将mysql jar文件添加到我的java应用程序的库中,如下面的屏幕截图所示。请帮我解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-28 01:28:47

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

MySQL和MariaDB驱动程序被认为在某种程度上是可以互换的,但是只有在访问MariaDB服务器时才谨慎地使用MariaDB连接器。无论如何,mariadb-java-client-1.1.7.jar的组合

代码语言:javascript
复制
Connection con = DriverManager.getConnection(
        "jdbc:mariadb://localhost/project", 
        "root", 
        "whatever");

对我很管用。我从这里下载了MariaDB客户端库:

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

我通过via到达的

https://downloads.mariadb.org/

其他注意事项:

  1. 您的Java代码中不需要Class.forName()语句。
  2. Mageia下MariaDB的默认配置可以在/etc/my.cnf中包含skip-networking指令。如果希望通过JDBC连接到数据库,则需要删除(或注释掉)该指令,因为JDBC连接总是看起来像是到MySQL/MariaDB的“网络”连接,即使它们是来自localhost的连接。(您可能还需要将bind-address值调整为类似于0.0.0.0的值。)
票数 20
EN

Stack Overflow用户

发布于 2015-12-13 19:50:01

另请注意:在浏览MariaDB JDBC驱动程序时,我在url解析文件中发现了以下内容:

代码语言:javascript
复制
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:"

没什么区别。

代码语言:javascript
复制
if (url.startsWith("jdbc:mariadb:")) {
    ....
    parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
    ....
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23020857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档