use*_*001 3 java mysql class jdbc
我正在学习JDBC,唯一我得不到的是下面代码中的类Class.
无论我是否删除Class.forName("com.mysql.jdbc.Driver"),它都能正常工作.
你能解释一下这部分中的Class.forName("com.mysql.jdbc.Driver")函数是什么吗?
import java.sql.*;
public class JSP {
public static void main(String[] args){
Connection myConn = null;
Statement st= null;
ResultSet rs= null;
try {
Class.forName("com.mysql.jdbc.Driver");
myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/customer", "root", "Gspot");
st = myConn.createStatement();
String query = "select * from customers";
rs = st.executeQuery(query);
while(rs.next()){
System.out.println(rs.getString("name"));
}
} catch(SQLException e){
e.printStackTrace();
} catch(ClassNotFoundException e) {
System.out.println("wow");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Class.forName创建java.lang.Class与给定名称对应的实例.这会强制类加载器加载此类,并在其static块中执行任何代码.
较旧的JDBC驱动程序曾经使用这些静态块将自己注册到java.sql.DriverManager它们,以便以后可以使用它们连接到数据库.JDBC 4是Java 6的一部分,它引入了一种自动加载JDBC驱动程序的机制,因此不再需要它.
Class.forName("com.mysql.jdbc.Driver") 将通过反射获取命名类的类对象。
如果该类存在,则代码中是否包含该行没有区别,您不会对返回值执行任何操作。但是,如果它在类路径上不存在,您将从该调用中得到一个异常,因此您会知道驱动程序丢失而不是连接失败。
假设 MySQL 驱动程序不存在于类路径中。
如果没有该语句,您可能会出现“无法打开连接”之类的错误,您可能需要解析日志并查找原因。
如果调用该语句,您将得到一个ClassNotFoundException,因此您将知道问题的原因:类加载器未找到驱动程序类。
编辑:阅读@Mureinik 的回答,这可能是该声明的更好理由。:)
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |