JDBC与反射

分类: 365bet线上娱 发布时间: 2025-09-04 12:03:00
作者: admin 阅读: 8248 | 点赞: 342
JDBC与反射

什么是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://:3306/

oracle url的格式是:jdbc:oracle:thin::1521:

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

}

}

» 本文链接:http://alphaway.org/post-327.html» 订阅本站:http://www.alphaway.org

» 转载请注明来源:alphaway博客 » 《JDBC与反射》