web-dev-qa-db-fra.com

Connectez-vous à MariaDB à partir de Java dans NetBeans sur 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 vient peut-être du pilote.

 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 recherché de l'aide sur Internet et suis venu par cette classe de pilotes fournie par la bibliothèque cliente MariaDB pour les applications Java n'est pas com.mysql.jdbc.Driver mais org.mariadb.jdbc.Driver! Je l'ai 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 pilote ne charge pas du tout. Aussi, 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 cela.enter image description here

13
Nitish Pareek

Il semble que vous tentiez 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. En d'autres termes, la chaîne de connexion doit correspondre au pilote utilisé (plutôt qu'au serveur de base de données auquel vous accédez).

Les pilotes MySQL et MariaDB sont censés être quelque peu interchangeables, mais il semble 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");

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

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

auquel je suis arrivé via

https://downloads.mariadb.org/

Notes complémentaires:

  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" à MySQL/MariaDB, même si ce sont des connexions de localhost. (Vous devrez peut-être également ajuster la valeur de bind-address À quelque chose comme 0.0.0.0.)

19
Gord Thompson

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);
    ....
12
Basil Musa