単純なJavaアプリケーションを介してMariadbのデータベースに接続しようとしていますが、接続が失敗したと通知され、例外がスローされます。 mysqlを使用して同様の接続を行ったところ、正常に機能していました。問題は、おそらくここのドライバーにあります。
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
インターネットでヘルプを検索し、Javaアプリケーション用のMariaDBクライアントライブラリが提供するドライバークラスを使用しました。com.mysql.jdbc.Driverではなく、org.mariadb.jdbc.Driverです。それに応じて変更しましたが、tryブロック内の最初の行に問題があるようです。ドライバーがまったくロードされていません。また、以下のスクリーンショットのように、mysql jarファイルをJavaアプリケーションのライブラリに追加しました。これを助けてください。
_jdbc:mariadb://...
_を使用して、MySQL JDBCドライバーを使用してMariaDBサーバーインスタンスへの接続を確立しようとしているようです。 MySQLサーバーまたはMariaDBサーバーに接続しているかどうかに関係なく、MySQL JDBCドライバーは_jdbc:mysql://...
_を使用するため、おそらく動作しません。つまり、接続文字列は、(アクセスされているデータベースサーバーではなく)使用されているdriverと一致する必要があります。
MySQLとMariaDBドライバーはある程度互換性があるはずですが、MariaDBサーバーにアクセスするときにMariaDBコネクターを使用するのが賢明なようです。価値があるものについては、_mariadb-Java-client-1.1.7.jar
_の組み合わせ
そして
_Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost/project",
"root",
"whatever");
_
私のために働いた。 JavaのMariaDBクライアントライブラリをここからダウンロードしました:
https://downloads.mariadb.org/client-Java/1.1.7/
経由で到着しました
https://downloads.mariadb.org/
その他の注意事項:
JavaコードではClass.forName()
ステートメントは不要です。
MageiaでのMariaDBのデフォルト設定には、_skip-networking
_に_/etc/my.cnf
_ディレクティブが含まれる場合があります。 JDBC接続は、localhost
からの接続であっても、常にMySQL/MariaDBへの「ネットワーク」接続のように見えるため、JDBC経由でデータベースに接続する場合は、このディレクティブを削除(またはコメントアウト)する必要があります。 (_bind-address
_値を_0.0.0.0
_のようなものに調整する必要があるかもしれません。)
追加のメモ:MariaDB JDBCドライバーを調べると、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;
}
}
ご覧のとおり、文字列"jdbc:mariadb:"
は内部で常に"jdbc:mysql:"
に置き換えられます。そのため、MariaDBドライバーに関しては、:mariadb:であろうと:mysql:であろうと、常に"jdbc:mysql:"
として解析されます。
変わりはない。
if (url.startsWith("jdbc:mariadb:")) {
....
parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop);
....