mariadb驱动下载教程_Java 1.8.0_60,MariaDB v10.0和mariadb-java-client 1.2.2,“找不到合适的驱动程序”...

仉俊能
2023-12-01

我试图找出为什么我无法连接到笔记本电脑上的mariadb. MariaDB安装了几个数据库,我可以使用HeidiSQL连接而没有问题.

我正在尝试将Java应用程序连接到数据库,但我得到:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mysql

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

我已经下载了“mariadb-java-client-1.2.2.jar”并将其添加到项目中.

我的数据库URI是:

jdbc:mysql://localhost:3306/mysql

我试过改变使用方法:

jdbc:mariadb://localhost:3306/mysql

结果相同.我之前在另一台PC上工作过,但我不知道它为什么不在笔记本电脑上工作?用户名和密码正确,与用于连接HeidiSQL的用户名和密码相同.

我试过两个:

Class.forName("com.mysql.jdbc.Driver");

Class.forName("org.mariadb.jdbc.Driver");

注册图书馆然后我读到这些不是必需的….我错过了什么?

码:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class clsDB {

//The name of this class

private static final String TAG = clsDB.class.toString();

//Define database URL, user name and password

private static final String SERVER_ADDR = "localhost";

//The database address on Windows development system

private static final String DB_URL = "jdbc:mariadb://" + SERVER_ADDR + ":3306/mysql";

private static final String USER_NAME = "root";

private static final String PASSWORD = "RRCmcs2014";

//Database connection object

private Connection m_con = null;

/**

* Class constructor

* @throws Exception

*/

public clsDB() throws Exception {

//Create connection to database

connect();

}

/**

* @param strMethod the method the error occurs in

* @param strMsg the message to display

*/

private void errorMsg(String strMethod, String strMsg) {

System.out.println(TAG + "." + strMethod + ": " + strMsg);

}

/**

* Destructor

*/

protected void finalize() throws Throwable {

close();

}

/**

* Attempts to close database connection

* @throws SQLException

*/

public void close() throws SQLException {

if ( m_con != null && m_con.isClosed() == false ) {

m_con.close();

}

}

/**

* Commits any changes to the database

* @throws SQLException

*/

public void commit() throws SQLException {

if ( m_con != null && m_con.isClosed() == false ) {

m_con.commit();

}

}

/**

* Attempts to connect to database

* @throws Exception

*/

private void connect() throws Exception {

//Get a connection to the database

m_con = (Connection)DriverManager.getConnection(DB_URL,

USER_NAME,

PASSWORD);

if ( m_con == null ) {

throw new Exception( "Cannot connect to database!" );

}

//Disable auto-commit

m_con.setAutoCommit(false);

}

/**

* Performs SQL execute or update

* @param strSQL, the SQL statement to perform

* @return If an insert was performed then the insert ID,

* If an update then the number of effected rows

*/

public long execute(String strSQL) throws SQLException {

Statement st = null;

long lngRC = 0;

try{

if ( m_con != null ) {

if ( m_con.isClosed() == true ) {

try{

connect();

} catch( Exception ex ) {

errorMsg("query", ex.getMessage());

}

}

st = (Statement)m_con.createStatement();

if ( (lngRC = (int)st.executeUpdate(strSQL, Statement.RETURN_GENERATED_KEYS)) > 0 ) {

if ( strSQL.toUpperCase().startsWith("INSERT") == true ) {

ResultSet keys = st.getGeneratedKeys();

if ( keys != null ) {

keys.next();

lngRC = keys.getLong(1);

}

}

m_con.commit();

}

}

} catch( SQLException ex ) {

errorMsg("execute", ex.getMessage());

} finally {

if ( st != null ) {

st.close();

}

}

return lngRC;

}

/**

* @return The database connection object

*/

public Connection getConnection() {

return m_con;

}

/**

* Performs SQL query

* @param strSQL, the SQL statement to perform

* @return the result of the query

*/

public ResultSet query(String strSQL) throws SQLException {

Statement st = null;

ResultSet rs = null;

try{

if ( m_con != null ) {

if ( m_con.isClosed() == true ) {

try{

connect();

} catch( Exception ex ) {

errorMsg("query", ex.getMessage());

}

}

st = (Statement)m_con.createStatement();

rs = st.executeQuery(strSQL);

}

} catch( SQLException ex ) {

errorMsg("query", ex.getMessage());

}

return rs;

}

}

解决方法:

似乎Mariadb驱动程序1.2.2对org.slf4j.LoggerFactory有隐藏的依赖.

如果使用该命令,您实际上可以看到这一点

Class.forName("org.mariadb.jdbc.Driver");

并查看生成的堆栈跟踪. JDBC 4及更高版本不需要该命令,但它对于跟踪JDBC驱动程序自动注册失败的原因很有用.

所以,你得到的堆栈跟踪是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

at org.mariadb.jdbc.Driver.(Driver.java:71)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:264)

at testing.clsDB.connect(clsDB.java:65)

at testing.clsDB.(clsDB.java:26)

at testing.SimpleTest.main(SimpleTest.java:7)

Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 6 more

这是一个错误,应该向MariaDB的供应商报告,因为他们在documentation中没有提到这个要求/依赖.

解决方法

标签:java,mysql,driver,mariadb,connector

来源: https://codeday.me/bug/20190609/1203139.html

 类似资料: