正如"Class.forName()"和"Class.forName().newInstance()"之间的区别所解释的那样?,Class.forName()方法执行以下操作:
调用Class.forName(String)返回与具有给定字符串名称的类或接口关联的Class对象
但是,如果它只是这样做,为什么需要调用这个方法才能将MySQL与Java一起使用呢?没有它我得到以下错误:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/calender
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at Database.main(Database.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Run Code Online (Sandbox Code Playgroud) 我试图准确地了解Java的服务提供程序机制如何工作以找到适当的JDBC驱动程序.这是我到目前为止:
由于Class.ForName不再用于显式加载JDBC Driver,因此Java会从传递给getConnection方法的数据库url字符串中知道它需要什么类型的驱动程序.例如,连接到oracle数据库的数据库url将是这样的:
public static final String DB_URL = "jdbc:oracle:thin@//localhost:1521/ORCL";
Run Code Online (Sandbox Code Playgroud)
然后,DriverManager将在projects类路径中指定的jar中查找oracle驱动程序的实现.它会在META-INF/Services每个jar的目录中查找驱动程序配置文件(其中将是实际驱动程序类的名称).在Class Loader将加载它找到的第一个比赛而忽略其他.
以上工作准确吗?如果我错过了什么或者出了什么问题,请告诉我.
我正在尝试将我的Java Applet连接到MySQL数据库.我知道它有效,因为我可以在localhost上连接到它,它可以很好地检索记录列表.但是,当我把它放在互联网上时,它不起作用.
这是我的小程序:http://mystikrpg.com/play
它已签名,但我一直收到以下异常:
SQLException获取原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
成功发送到服务器的最后一个数据包是0毫秒前.驱动程序未收到来自服务器的任何数据包.
怎么会发生这种情况,我该怎么做才能解决这个问题呢?
这是applet的源代码:http://sodan.pastebin.com/jWKTgBSU
有什么区别Class.forName("Something");和Class.forName("Something").newInstance();请澄清我.