Java——JDBC小结(3)

1.连接池技术的引出

上面我已经阐述了将JDBC封装成了很好用的工具类,其实对于个人封装性已经是很好的了,但是通常我么应该考虑到我们每次在执行一条SQL句时,都要对数据库进行连接,与关闭,这极大的消耗了数据库的资源,为了解决这个问题,提出了连接池技术。这里我想说一下,以我目前学到的知识来看,每次出现池这个概念的时候一定是要提高系统效率的,比如说线程池。

连接池技术就是系统在开始的时候先主动地建立若干个连接,当有用户要进行SQL操作的时候,系统会分配给当前用户一个连接,用户在使用这个连接完毕后,不必关闭这个连接,而是将这个连接归还给连接池,那么当有大量用户同时需要对数据库进行操作而导致连接数量不够分配的时候,没有分配到连接的用户需要等待,等到其他用户归还后,在分配给这个用户,这样的设计方式极大的提高了系统的运行效率。

2.连接池的具体代码

这里我首先要说的是在eclipse要想使用连接池,首先要导入相应池的jar包,然后我们要对之前的连接配置文件做一个简单的修改如下所示:

jdbc.driverclass=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:localhost:orcl
jdbc.user=system
jdbc.password=123
#dbcp param
dbcp.maxActive=1
dbcp.initSize=1

可以看到就是在之前的文件之中加入了两句话,设置连接的初始和最大连接数,这里数量不要设置过大,否则会造成数据库瘫痪。

整体代码如下:

 1 package jbbc_day01;
 2
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.SQLException;
 6 import java.util.Properties;
 7
 8 import org.apache.commons.dbcp.BasicDataSource;
 9
10 /**
11  * 用来管理连接
12  * 数据库连接信息,保存在属性文件中
13  * @author jiawenzhe
14  *
15  */
16 public class DBUtil3 {
17     private static BasicDataSource ds;
18     //1、加载驱动
19     static{
20         try {
21             //加载属性文件数据
22             Properties prop = new Properties();
23             prop.load
24             (DBUtil3.class.getClassLoader().
25             getResourceAsStream
26             ("db.properties"));
27             String driverclass = prop.getProperty("jdbc.driverclass");
28             String url = prop.getProperty("jdbc.url");
29             String user = prop.getProperty("jdbc.user");
30             String password = prop.getProperty("jdbc.password");
31             String strMaxActive
32             = prop.getProperty("dbcp.maxActive");
33             String strInitSize
34             = prop.getProperty("dbcp.initSize");
35             //实例化,并初始化连接池
36             ds = new BasicDataSource();
37             ds.setDriverClassName(driverclass);
38             ds.setUrl(url);
39             ds.setUsername(user);
40             ds.setPassword(password);
41             ds.setMaxActive
42             (Integer.parseInt(strMaxActive));
43             ds.setInitialSize
44             (Integer.parseInt(strInitSize));
45
46         }  catch (IOException e) {
47             e.printStackTrace();
48             throw new RuntimeException
49             ("读取属性文件错误",e);
50         }
51     }
52     //2、创建连接
53     public static  Connection getConnection() throws SQLException{
54         return ds.getConnection() ;
55     }
56
57     //3、关闭连接
58      public static void close(Connection conn){
59          if(conn!=null){
60              try {
61                 conn.close();
62             } catch (SQLException e) {
63                 e.printStackTrace();
64                 throw new RuntimeException("关闭连接错误",e);
65             }
66          }
67      }
68 }

这里面同样是调用了close()方法,但是我们不能像之前那样理解为关闭连接,而我们应该认为他是归还给连接池,用Properties类读取出来的初始化和最大连接数量是字符串类型,而需要将字符串类型转换为Integer类型。

这里需要在介绍一个新类:BasicDataSource();

在我看来这个类再一次的优化了连接的封装

在实例化这个类之后,他有一系列的set属性方法,就是将Properties类get得到的值放入其中去统一初始化连接的准备工作,而不用想工具类2中那样放入到对应的方法中,而且这个类实现的对象直接就可以调用getConnection对象返回一个连接。

这样最终版本的JDBC工具类就写好了,我们再进行JDBC操作的时候可以直接拿来使用这个工具类,而之前所述的那两个工具类,都是为了最终引出这个工具类而做的前提铺垫

所以只需要记住这个工具类即可!

未完待续!

时间: 2024-10-14 00:36:32

Java——JDBC小结(3)的相关文章

Java——JDBC小结

---恢复内容开始--- 1.首先说明什么是JDBC在第一眼看到这个名词之前,我觉得有必要知道它的英文全称是什么,Java Database Connectivity,从英文字面上理解就直译为可连通的Java数据库,说白了也就是想提供一套中间环节,去连接Java代码与数据库,使之可以直接通过操作Java代码就可以控制数据库. 2.JDBC的实质它是Java访问数据库的解决方案,希望能过用同样的方式访问不同的数据库,以达到实现与具体数据库无关的Java操作界面.JDBC实质上就是就是一套标准化的接

Java——JDBC小结终结

在JDBC的最后一个内容中,我将叙述的是最后一个概念DAO 1.DAO DAO(Data Access Object)数据访问对象,他是建立在业务层与数据库之间,目的就是为了分开数据访问逻辑和业务逻辑 接下来我直接说明关于DAO的建立,首先要先创建一个实体类,并对其进行序列化,实体类里面包含的是数据表的各个字段,同时要包含他们各自的get,set方法,示例代码如下: 1 package entity; 2 3 import java.io.Serializable; 4 import java.

Java——JDBC小结(4)

在前面的关于JDBC的叙述中,着重说明了工具类的创建办法,接下来我将就我之前没有提到的查询的方式加以说明,在说明查询之前我先引出一个新的概念就是结果集这个类,及他的相关的一些方法 1.结果集 之前有提到过发送SQL的Statement这个类,他的主要作用就是发送SQL到数据库,对于增,删,改,使用的方法是Statement.executeUpdata();注意他的返回值是一个整形,也就是返回的是数据库受影响的行数,而在进行查找的SQL时,要调用的方法是Statement.executeQuery

Java——JDBC小结(2)

1.封装方法的引出 学了一段时间的Java给我感触最深的就是,当前写某一系列的代码的时候,如果出现了代码的复用,肯定会选择一种方法对代码进行一定程度的封装,从封装一个方法到封装一个类,之前有提到的使用JDBC进行数据库的操作(增,删,改,因为查询涉及到对结果集的操作,将单独声明)分为四个过程: 1)加载驱动 2)创建连接 3)创建语句对象,发送SQL 4)关闭连接 也就是说我们在进行任何对数据库操作的时候,都要进行上述步骤,这便出现了代码的冗余,于是便提出了封装这些共性的步骤到一个类中,使其能成

Java——JDBC小结(5)

1.事物 关于事物的概念及原理有好多好多,但我的理解就是一句话,要保持一个整体性,就是一个事,要分成几个步骤去完成,但是只有这几个步骤都做完了才是一个完整的事.这里面最简单的示例就是模拟银行的取款与存款了,我直接给出这个示例代码然后加以分析 1 @Test 2 public void test2(){ 3 String payId="00001"; 4 String recId="00002"; 5 double mny=1000; 6 Connection con

Java JDBC高级特性

1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现了批处理.测试表结构如下: Statement批处理程序示例 1 package server; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 impor

Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 及sql2008外围服务器

转载:Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 错误原因如下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot open connection at org.hibernate.exception.SQLStateConverter.convert(SQLStateConver

java枚举小结

在百度百科上是这样介绍枚举的: 在C#或C++,java等一些计算机编程语言中,枚举类型是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中,它是一种构造数据类型.枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型. 而在java中,枚举扩大了这一概念,因为在java中,枚举已经称为一个类,因此完全具有类的特性. 我们都知道枚举是JDK1.5才推出的新概念,那么在此之前,我们如果想使用一些固定的常量集合,比如性别(2个),季节(4个),星期(7个)

java加密算法小结(2)--MD5加密算法

上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇来整理一下一个被广泛应用的加密算法---MD5. 简单了解 MD5(Message Digest Algorithm 5),翻译过来是消息摘要算法第五版,按照惯例,我们推理可能也有MD2,MD3这样名字的历史版本.. 即使完全不了解这个算法的原理,我们也可以从命名中看出一些眉道,所谓摘要,就是一个简短的概括,像我写过的毕业论文,上来第一部分就是摘要,它对后面长篇大论的文章做了一个简短有力的概