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.
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
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:
Il n'y a pas besoin d'une instruction Class.forName()
dans votre code Java.
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
.)
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);
....