什么是JDBC
Java定義了一套關於連接使用數據庫的規范(接口)叫做JDBC,許多數據庫廠商實現了這個規范,所以我們可以通過Java提供的接口編程,使得我們更換數據庫的時候不用修改原來的代碼,只需要通過修改配置文件即可,修改什么配置文件呢?下面會說。
什么是反射
如果我們在程序運行的時候得到一個字符串,而這個字符串是某個類的類名,如果要實例化這個類,那么就需要用到反射。
1
2
3
4
|
String className = "com.mysql.jdbc.Driver";//完整的包名+類名
Driver driver = (Driver)Class.forName(driverClass).newInstance();//通過反射實例化這個類
|
JDBC的使用過程
使用JDBC的時候要去下載對應的驅動程序,使用mysql,就要去mysql的官網下載,使用oracle,就去oracle的官網下載,然后把類庫導入到工程中。這些驅動程序,其實就是實現了JDBC規范的類庫。我使用的是mysql。
1.首先通過反射com.mysql.jdbc.Driver類,實例化該類的時候會執行該類內部的靜態代碼塊,該代碼塊會在Java實現的DriverManager類中注冊自己,DriverManager管理所有已經注冊的驅動類,當調用DriverManager.geConnection方法時會遍歷這些驅動類,並嘗試去連接數據庫,只要有一個能連接成功,就返回Connection對象,否則則報異常。
2.通過使用DriverManager.geConnection(url,user,password)函數,傳入url,數據庫用戶名,數據庫密碼,得到數據庫的Connection對象。
com.mysql.jdbc.Driver是mysql驅動類的全名,oracle驅動類的全名是oracle.jdbc.driver.OracleDriver。
連接數據庫時要傳入相應的url,
mysql url的格式是:jdbc:mysql://<ip>:3306/<database_name>
oracle url的格式是:jdbc:oracle:thin:<ip>:1521:<database_name>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public void TestJDBC2(){
try {
//通過反射實例化com.mysql.jdbc.Driver,
Driver driver = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance();
//得到數據庫的連接對象
Connection conn =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/notedb","root","");
System.out.println(conn);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
通過配置文件使用JDBC
從上面可以看出,我們把數據庫的驅動名和url寫死在了程序中,那么更換數據庫的時候還是需要更改程序代碼的。
我們可以將信息寫在配置普文件中,程序運行時讀取配置信息,然后通過配置信息連接數據庫,那么程序和數據庫的耦合度就很低了,可以隨時更換數據庫。
1.在程序目錄下新建jdbc.properties配置文件,並寫入連接數據庫有關的信息。
2.讀取配置信息,獲取連接數據庫所需要的屬性值。
3.通過JDBC連接數據庫。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Main {
public void TestJDBC(){
//將配置文件變成輸入流
InputStream in =
getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
//從流中獲取配置信息到Properties對象
properties.load(in);
//讀取配置文件
String driverClass = properties.getProperty("driver");
String jdbcUrl = properties.getProperty("jdbcUrl");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
//注冊驅動
Driver driver = (Driver)Class.forName(driverClass).newInstance();
Connection conn = DriverManager.getConnection(jdbcUrl,user,password);
System.out.println(conn);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
Main m = new Main();
m.TestJDBC2();
}
}
|