运行jdbc程序时线程“ main” java.sql.SQLException中的异常?

问题描述 投票:0回答:1

我最近开始学习JDBC并编写程序在MySQL数据库中创建表,但是很不幸,我遇到了一些错误,或者可能是一些异常,我无法自行解决。我只是一个初学者,所以请帮助我摆脱这种情况。

下面是我编写的程序:

package first;
import java.sql.*;
public class Firstclass {

    public static void main(String[] args) throws Exception 
    {
        // TODO Auto-generated method stub
        String driver="com.mysql.jdbc.Driver";
        String JDBC_URL=" jdbc:mysql://localhost:3306/demodatabase";
        String user_name="root";
        String password="toor";
        String sqlquery="create table employee(eno number,ename varchar2(10),esal number(10,2),addr varchar2(10))";
        Class.forName(driver);
        Connection con=DriverManager.getConnection(JDBC_URL,user_name,password);
        Statement st=con.createStatement();
        st.executeUpdate(sqlquery);
        System.out.println("Table created Successfully");
        con.close();
    }

}

我正在使用Eclipse IDE。而且我已经安装了Oracle Java 14.0.1。

下面是我得到的错误/异常:

loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Exception in thread "main" java.sql.SQLException: No suitable driver found for  jdbc:mysql://localhost:3306/demodatabase
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at first.Firstclass.main(Firstclass.java:14)
java mysql jdbc
1个回答
0
投票

驱动程序类名称在您使用的版本中已更改为com.mysql.cj.jdbc.Driver。由于您正在尝试使用不带Maven或gradle的纯Java进行此操作,因此必须提供所有用于此目的的依赖jar。检查以下内容:

  • 对于您使用的连接器版本mysql-connector-java-8.0.20.jar要工作,Java版本必须为java8。
  • 如果要从源代码构建,请验证类路径上是否有协议缓冲区和简单日志记录Facade API。

您可能还需要在以下计算机上安装以下第三方库 您的系统才能使Connector / J 8.0正常工作: 协议缓冲区(使用X DevAPI必需)\ Simple Logging Facade API(使用默认实现的日志记录功能所需的API) org.slf4j.Logger.Slf4JLogger by Connector / J)。 这些和其他第三方库是构建所需的 来自源的Connector / J(请参阅本节,以获取有关 所需的库)。

而且,在MySql文档中,他们建议我们像这样调用newInstance()(文档对此没有适当的解释):

public class LoadDriver {
    public static void main(String[] args) {
        try {
            // The newInstance() call is a work around for some
            // broken Java implementations

            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
        } catch (Exception ex) {
            // handle the error
        }
    }
}

官方doc link

[此外,由于Java 6我们不需要提供Class.forName()来加载驱动程序,因为Java SPI(服务提供商接口)机制应该会自动检测适当的驱动程序。即使您像以前那样提供它,它仍然可以完美地工作。

DriverManager方法getConnection和getDrivers已被 增强以支持Java Standard Edition Service Provider 机制。

Java official link

© www.soinside.com 2019 - 2024. All rights reserved.