Connectez-vous à MariaDB à partir de l'application Java dans NetBeans sous Linux (Mageia)


J'essaie de me connecter à une base de données dans Mariadb via une simple application java mais la connexion est déclarée infructueuse et une exception est levée. J'ai fait la connexion similaire en utilisant Mysql et cela fonctionnait correctement. Le problème est peut-être avec le conducteur ici.

 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

J'ai cherché l'aide sur Internet et je suis venu par cette classe de pilote fournie par la bibliothèque cliente MariaDB pour les applications Java n'est pas com.mysql.jdbc.Conducteur mais org.mariadb.jdbc.Pilote! Je changé en conséquence, mais il semble que le problème soit avec la toute première ligne à l'intérieur du bloc try. Le conducteur ne charge pas du tout. En outre, j'ai ajouté le fichier jar mysql aux bibliothèques de mon application java comme dans la capture d'écran ci-dessous. S'il vous plaît aidez-moi à travers ce.entrez la description de l'image ici

Author: Gord Thompson, 2014-04-11

2 answers

Il semble que vous essayez d'utiliser jdbc:mariadb://... pour établir une connexion à une instance de serveur MariaDB à l'aide du pilote JDBC MySQL. Cela ne fonctionnera probablement pas car le pilote JDBC MySQL utiliserait jdbc:mysql://..., qu'il se connecte à un serveur MySQL ou à un serveur MariaDB. Autrement dit, la chaîne de connexion doit correspondre au pilote utilisé (plutôt qu'au serveur de base de données auquel on accède).

Les pilotes MySQL et MariaDB sont censés être quelque peu interchangeables, mais il semble seulement prudent d'utiliser le connecteur MariaDB lors de l'accès à un serveur MariaDB. Pour ce que ça vaut, la combinaison de mariadb-java-client-1.1.7.jar

projectProperties.png

Et

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

A travaillé pour moi. J'ai téléchargé la bibliothèque client MariaDB pour Java à partir d'ici:

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

Auquel je suis arrivé par

Https://downloads.mariadb.org/

Supplémentaire notes:

  1. Il n'y a pas besoin d'une instruction Class.forName() dans votre code Java.

  2. La configuration par défaut de MariaDB sous Mageia peut inclure la directive skip-networking dans /etc/my.cnf. Vous devrez supprimer (ou commenter) cette directive si vous souhaitez vous connecter à la base de données via JDBC car les connexions JDBC ressemblent toujours à des connexions "réseau" vers MySQL/MariaDB, même si ce sont des connexions depuis localhost. (Vous devrez peut-être modifier la valeur bind-address en quelque chose comme 0.0.0.0 Aussi.)

 17
Author: Gord Thompson, 2014-04-27 17:28:47

Une note supplémentaire: En explorant le pilote MariaDB JDBC, j'ai trouvé cela dans le fichier d'analyse d'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;
            }
        }    

Comme vous pouvez le voir, la chaîne "jdbc:mariadb:" est toujours remplacé par "jdbc:mysql:" en interne. Donc, quand il s'agit du pilote MariaDB, que ce soit :mariadb: ou :mysql: il est toujours analysé comme "jdbc:mysql:".

Aucune différence.

if (url.startsWith("jdbc:mariadb:")) {
    ....
    parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
    ....
 11
Author: Basil Musa, 2016-07-11 13:36:12