JDBC进阶(一)

************************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());
}
}

 

转载于:https://www.cnblogs.com/MrTanJunCai/p/9907501.html

你可能感兴趣的:(JDBC进阶(一))