************************Class.forName()的作用?(面试题)***********************
1. 程序员主动使用Class.forName()来加载驱动
oracle.jdbc.OracleDriver driver = new oracle.jdbc.OracleDriver();
写死的话 虽然也能加载驱动 但是如果数据库 oracle-->mysql 需要改代码 不可维护
不符合OCP原则
使用Class.forName 可以className、url、user、password放到 db.properties
然后使用Properties类读取属性文件中的信息,如果数据库 oracle-->mysql 只需要
修改db.properties属性文件中的字符串信息就可以了 不需要修改代码 可维护
2.同时返回驱动类所对应的Class对象
**********************JDBC底层源代码分析***************************
try
{
if(defaultDriver == null)
{
defaultDriver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(defaultDriver);
}
Connection con = aDriver.driver.connect(url, info);
连接数据库的代码可以改成
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年8月30日 上午9:26:05
* 功能:连接数据库的工具类
*/
public class ConnOracle {
public static Connection getConnection(){
Connection conn = null;
String className = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
//1.创建驱动类对象
oracle.jdbc.OracleDriver driver = new oracle.jdbc.OracleDriver();
java.util.Properties info = new java.util.Properties();
if (user != null) {
info.put("user", user);
}
if (password != null) {
info.put("password", password);
}
//2.调用驱动类对象的connect方法来连接 数据库服务器 返回Connection对象
try {
conn = driver.connect(url, info);
} catch (SQLException e1) {
e1.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
System.out.println(ConnOracle.getConnection());
}
}