Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connect to MariaDB from Java application in NetBeans on Linux (Mageia)

I am trying to connect to a database in Mariadb through a simple java application but the connection is told to be unsuccessful and an Exception is thrown. I have done the similar connection using mysql and it was working correctly. The problem is maybe with the driver here.

 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

I looked up the internet for the help and came by that driver class provided by the MariaDB Client Library for Java Applications is not com.mysql.jdbc.Driver but org.mariadb.jdbc.Driver! I changed it accordingly but it seems the problem is with the very first line inside the try block. The driver is not loading at all. Also, I have added the mysql jar file to the libraries of my java application as in the screen-shot below. Please help me through this.enter image description here

like image 255
Nitish Pareek Avatar asked Apr 11 '14 19:04

Nitish Pareek


People also ask

Does JDBC work with MariaDB?

MariaDB Connector/J is a Type 4 JDBC driver. It was developed specifically as a lightweight JDBC connector for use with MariaDB and MySQL database servers.

How do I get MariaDB connection string?

MariaDB uses the connection string to authenticate your account and allow you to extract the relevant data for your account. To create the connection string: Open the lib directory for the connector. This is the default path: C:\Program Files\CData\CData JDBC Driver for <Driver Name> 2019\lib .

What is MariaDB Java client?

MariaDB Java connector is the library that is licensed under LGPL and is used for establishing the connection between the applications developed by using Java programming language to the Database Management systems such as MariaDB and MySQL.

Can we use MySQL connector for MariaDB?

The MariaDB API and protocol are compatible with those used by MySQL. This means that connectors that work with MySQL should also work with MariaDB.


2 Answers

It appears that you are trying to use jdbc:mariadb://... to establish a connection to a MariaDB server instance using the MySQL JDBC Driver. That probably won't work because the MySQL JDBC Driver would use jdbc:mysql://..., regardless of whether it is connecting to a MySQL server or a MariaDB server. That is, the connection string must match the driver that is being used (rather than the database server being accessed).

The MySQL and MariaDB drivers are supposed to be somewhat interchangeable, but it only seems prudent to use the MariaDB connector when accessing a MariaDB server. For what it's worth, the combination of mariadb-java-client-1.1.7.jar

projectProperties.png

and

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

worked for me. I downloaded the MariaDB Client Library for Java from here:

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

which I arrived at via

https://downloads.mariadb.org/

Additional notes:

  1. There is no need for a Class.forName() statement in your Java code.

  2. The default configuration for MariaDB under Mageia may include the skip-networking directive in /etc/my.cnf. You will need to remove (or comment out) that directive if you want to connect to the database via JDBC because JDBC connections always look like "network" connections to MySQL/MariaDB, even if they are connections from localhost. (You may need to tweak the bind-address value to something like 0.0.0.0 as well.)

like image 118
Gord Thompson Avatar answered Sep 22 '22 00:09

Gord Thompson


An additional note: Exploring the MariaDB JDBC driver, I found this inside the url parsing file:

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;
            }
        }    

As you can see, the string "jdbc:mariadb:" is always replaced with "jdbc:mysql:" internally. So when it comes to the MariaDB driver, whether it is :mariadb: or :mysql: it always gets parsed as "jdbc:mysql:".

No difference.

if (url.startsWith("jdbc:mariadb:")) {
    ....
    parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
    ....
like image 41
Basil Musa Avatar answered Sep 20 '22 00:09

Basil Musa