17 java mysql database jsp class
连接到MySQL数据库时,我执行以下步骤
Connection con = null;
Resultset rs = null;
Statement st = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","passwp");
Run Code Online (Sandbox Code Playgroud)
其实我想知道Class.forName("com.mysql.jdbc.Driver").newInstance();
声明做了什么.
Althogh这个类不在mysql.jar中.它在哪里?
cho*_*ger 26
本Class
类位于java.lang包,因此在分布用java,并自动导入到每个班级.
该forName()
方法的作用是返回Class
由类加载器加载的参数的对象.newInstance()
然后该方法返回该类的新实例.
那么接下来会发生什么
Class.forName(...)
呢?它会返回com.mysql.jdbc.Driver.class.然后你调用newInstance()
那个类,它返回一个类的实例,没有参数,所以它基本上是调用new com.mysql.jdbc.Driver();
.
"com.mysql.jdbc.Driver"
如果在类路径中找到它,则初始化类,这意味着驱动程序在JDBC驱动程序管理器中注册,因为注册过程在驱动程序类的静态初始化程序内...
您可以使用另一种方法来注册驱动程序:是使用静态DriverManager.registerDriver()
方法.
引用《JDBC规范》第9章第2节:
JDBC驱动程序必须实现Driver接口,并且实现必须包含一个静态初始化程序,该静态初始化程序将在驱动程序加载时被调用。该初始化程序在DriverManager中注册其自身的新实例。
并提供了AcmeJdbcDriver
以下示例代码:
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(newAcmeJdbcDriver());
}
}
Run Code Online (Sandbox Code Playgroud)
根据API文档,当您调用Class.forName(String className)时,会发生以下情况:
调用forName(“ X”)会导致初始化名为X的类。
其中初始化涉及要执行的静态块中的代码。
因此,基本上,您可以初始化Driver类,然后该类java.sql.DriverManager
按照JDBC规范向其注册。
请注意,这不再需要。详细信息可以在这里找到。
对DriverManager方法getConnection和getDrivers进行了增强,以支持Java Standard Edition Service Provider机制。JDBC 4.0驱动程序必须包含文件META-INF / services / java.sql.Driver。该文件包含java.sql.Driver的JDBC驱动程序实现的名称。例如,要加载my.sql.Driver类,META-INF / services / java.sql.Driver文件将包含以下条目:
Run Code Online (Sandbox Code Playgroud)my.sql.Driver
应用程序不再需要使用Class.forName()显式加载JDBC驱动程序。
它将创建一个新的com.mysql.jdbc.Driver
类实例,因此调用静态初始化,它将注册驱动程序,DriverManager
因此您可以根据您在第二行中使用的URL创建mysql连接.
然而,班级应该在mysql.jar
.
归档时间: |
|
查看次数: |
48263 次 |
最近记录: |