Class.forName("org.gjt.mm.mysql.Driver").newInstance()是不是不需要也能连接数据库啊?

时间:2022-07-16 11:54:06
貌似只要Connection c = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=root");就能连接数据库。
Class.forName("org.gjt.mm.mysql.Driver").newInstance()是不是不需要了?

5 个解决方案

#1


Class.forName("****")是永远需要的。
因为它是真正的jdbc Driver class。否则DriverManager就不知道用哪个Driver了。

如果你很感兴趣jdbc是如何实现的,可以下一份jdk的源码,读读DriverManager.getConnection的方法实现就知道了。

#2


请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目: 

 my.sql.Driver
应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。 

#3


引用 2 楼 llluyan 的回复:
请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包……

这个,大概是jdk1.6或以后吧。你如果用的是jdbc 4.0 drivers, 那"org.gjt.mm.mysql.Driver"也太陈旧了。这个是非常旧的mysql jdbc driver。

jdk1.5里边应该还没有jdbc 4.0 。你的提问最好连同jdk的版本号一起提供。

#4


引用 3 楼 iihero 的回复:
引用 2 楼 llluyan 的回复:

请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/……

呵呵,是jdk1.6update18
1. 我如何知道我的jdbc版本?
2. 在navicat for mysql 9 中,能不能手动添加记录,不用写insert into语句?

#5


引用 4 楼 llluyan 的回复:
请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/……

呵呵,是jdk1.6update18
1. 我如何知道我的jdbc版本?
2. 在navicat for mysql 9 中,能不能手动添加记录,不用写insert into语句?


1.你说摘自javadoc,这个javadoc就有对应的jdk的版本,于是你更应该查出它的适用范围。

我不知道mysql最新的jdbc driver是否已经实现了JDBC 4.0(或者部分实现:-0, 待查)

2. navicat for mysql中,直接双击一个表,然后就可以点击"+"添加记录了。非常简单啊。

#1


Class.forName("****")是永远需要的。
因为它是真正的jdbc Driver class。否则DriverManager就不知道用哪个Driver了。

如果你很感兴趣jdbc是如何实现的,可以下一份jdk的源码,读读DriverManager.getConnection的方法实现就知道了。

#2


请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目: 

 my.sql.Driver
应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。 

#3


引用 2 楼 llluyan 的回复:
请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包……

这个,大概是jdk1.6或以后吧。你如果用的是jdbc 4.0 drivers, 那"org.gjt.mm.mysql.Driver"也太陈旧了。这个是非常旧的mysql jdbc driver。

jdk1.5里边应该还没有jdbc 4.0 。你的提问最好连同jdk的版本号一起提供。

#4


引用 3 楼 iihero 的回复:
引用 2 楼 llluyan 的回复:

请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/……

呵呵,是jdk1.6update18
1. 我如何知道我的jdbc版本?
2. 在navicat for mysql 9 中,能不能手动添加记录,不用写insert into语句?

#5


引用 4 楼 llluyan 的回复:
请看这段话(摘自javadoc,类 DriverManager页面):
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/……

呵呵,是jdk1.6update18
1. 我如何知道我的jdbc版本?
2. 在navicat for mysql 9 中,能不能手动添加记录,不用写insert into语句?


1.你说摘自javadoc,这个javadoc就有对应的jdk的版本,于是你更应该查出它的适用范围。

我不知道mysql最新的jdbc driver是否已经实现了JDBC 4.0(或者部分实现:-0, 待查)

2. navicat for mysql中,直接双击一个表,然后就可以点击"+"添加记录了。非常简单啊。