PoeticalJustice

导航

JDBC之使用配置文件链接数据库

写在前面

JDBC以一种统一的方式来对各种各样的数据库进行存取,JDBC为开发人员隐藏了不同数据库的不同特性。程序员开发时,知道要开发访问数据库的应用,于是将一个对应数据库的JDBC驱动程序类的引用进行了编码,并通过使用适当的JDBC URL 连接到数据库。

首先保证oracle服务开启,至于怎么开启,请看oracle篇。

第一步 

当然是创建配置文件啊

1.选好文件夹右键 new file

 

或者

点左上角file 再选路径 

 

 2.取号配置文件名字+文件后缀  name.properties   点finish

3.编辑配置文件

点Source  ♂   根据具体情况写,#是注释,

driver后边写的是JDBC驱动文件名(固定写法)

url=jdbc:oracle:thin:ip地址: 端口:数据库名

本机地址@localhost 或者127.0.0.1

name=数据库账号名

password=密码

 

第二步

编写一个类

 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 import java.text.SimpleDateFormat;
10 import java.util.Date;
11 import java.util.Properties;
12 
13 public class JdbcTest {
14 
15     public void queryEmp() {
16         Connection conn = null;
17         PreparedStatement ps = null;
18         ResultSet rs = null;
19         // 配置文件路径
20         String configFile = "db.properties";
21         // 创建一个Properties对象
22         Properties prop = new Properties();
23         // 将Properties配置文件 读入输入流
24         // 读取Properties配置文件的方法有6种
25         InputStream in = ClassLoader.getSystemResourceAsStream(configFile);
26         try {
27             prop.load(in);
28         } catch (IOException e1) {
29             
30             e1.printStackTrace();
31         }
32         String driver = prop.getProperty("driver");
33         String url = prop.getProperty("url");
34         String name = prop.getProperty("name");
35         String password = prop.getProperty("password");
36 
37         try {
38             // 加载JDBC驱动
39             Class.forName(driver);
40             // 获取连接 链接数据库
41             conn = DriverManager.getConnection(url, name, password);
42             String sql = "select * from emp where empno=?";
43             // 获取Statement对象,来写SQL语句
44             ps = conn.prepareStatement(sql);
45             ps.setInt(1, 7902);
46             // 执行SQL语句,获取结果集
47             rs = ps.executeQuery();
48             while (rs.next()) {
49                 String ename = rs.getString("ename");
50                 int empno = rs.getInt("empno");
51                 Date date = rs.getDate("hiredate");
52                 double salary = rs.getDouble("sal");
53                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
54                 String hiredate = sdf.format(date);
55                 System.out.println("员工姓名:" + ename + "\t员工编号" + empno
56                         + "\t入职日期" + hiredate + "\t工资" + salary);
57             }
58         } catch (ClassNotFoundException e) {
59             e.printStackTrace();
60         } catch (SQLException e) {
61             e.printStackTrace();
62         } finally {
63             // 关闭资源 必须写 很占内存
64             if (rs != null) {
65                 try {
66                     rs.close();
67                 } catch (SQLException e) {
68                     e.printStackTrace();
69                 }
70 
71             }
72             if (ps != null) {
73                 try {
74                     ps.close();
75                 } catch (SQLException e) {
76                     e.printStackTrace();
77                 }
78             }
79             if (conn != null) {
80                 try {
81                     conn.close();
82                 } catch (SQLException e) {
83                     e.printStackTrace();
84                 }
85             }
86         }
87     }
88 
89 }

 

写个main方法测试一哈

1 public class Test {
2 
3     public static void main(String[] args) {
4          JdbcTest test = new JdbcTest();
5          test.queryEmp();
6     }
7 }

控制台输出

说明链接到数据了,over!

 

写在后边

这么做有什么弊端?

这种方式带来的问题:

1、数据库服务器名称、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2、数据库可能改用别的产品,如改用DB2或者MySql,引发JDBC驱动程序包和类名需要修改;
3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;

4· 

我们的WEB应用每次接受到一个客户的请求,都会和数据库取得连接,数据库操作结束后就会断开连接,这样的话就会耗费服务器大量的时间和内存。

因为此时数据库每次配置链接都要将Connection对象加载到内存中,再验证用户名和密码。这个是很可怕的。

 

解决办法:
程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

由此,就有了JNDI,配置数据源。

数据源,一下篇讲。

posted on 2017-09-29 17:18  PoeticalJustice  阅读(1066)  评论(0编辑  收藏  举报