我最近开始学习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)
驱动程序类名称在您使用的版本中已更改为com.mysql.cj.jdbc.Driver
。由于您正在尝试使用不带Maven或gradle的纯Java进行此操作,因此必须提供所有用于此目的的依赖jar。检查以下内容:
mysql-connector-java-8.0.20.jar
要工作,Java版本必须为java8。您可能还需要在以下计算机上安装以下第三方库 您的系统才能使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。