元数据,DBUtils工具,连接池

1元数据

1.1 作用

使用元数据,可以编写jdbc预编译statement的参数以及ResultSet的结果个数和名称

1.2三种元数据

1)数据库元对象(DatabaseMetaData

知道连接的哪个数据库,必须使用数据库的元数据对象  

2)参数元对象(ParameterMetaData

insert into studnetx(xxxx) values(?,?);

预编译sql之后,知道预编译的sql有几个参数,必须使用参数元数据

3)结果集元对象(ResultSetMetaData)

ResultSet  rs

知道表的字段数,和字段名称,必须使用结果集的元数据

1.3 方法

ParameterMetaData pmd = stmt.getParameterMetaData();//获取参数元数据

扫描二维码关注公众号,回复: 117621 查看本文章

int paramCount = pmd.getParameterCount();//获取占位符参数的个数

ResultSetMetaData rsmd = rs.getMetaData();//获取返回结果的结果集元数据

int columnCount = rsmd.getColumnCount(); //得到列数量

String columnName = rsmd.getColumnName(i); //到字段名称

2 DBUtils工具

2.1 简介

简单的jdbc代码的封装

2.2 导包

commons-dbutils-1.2.jar

2.3 使用的API

QueryRunner 通过此类可以执行更新操作或者查询操作。

update(.....): 用于更新操作(DDLDML

query(.....): 用于查询操作(DQL

ResultSetHandler接口:用于封装查询之后的结果。

    Object handle(ResultSet rs)   用于封装数据

2.4 方法

QueryRunner qr = new QueryRunner(conn)

qr.update("sql", new Object[]{参数列表}); //更新查询

qr.query("ssql", ResultSetHandler接口的实现类, new Object[]{参数列表});

ResultSetHandler()常用的实现类:

ArrayHandler 把结果集的第一行的数据封装成对象数组。

ArrayListHandler:把结果集的每一行数据封装对象数组,把这个对象数组放入List

BeanHandler 把结果集的第一行数据封装成javabean对象

BeanListHandler: 把结果集的每一行数据封装成javabean对象,把这个javabean放入List

MapHandler:把结果集的第一行数据封装成map对象

ScalarHandler 把结果集的第一行第一列取出。通常用于聚合函数查询。例如(count()/max()

注:如果表的字段名称和javabean的属性名称不一致时,需要自定义ResultSetHandler的实现类

3 连接池

3.1 简介

存储常用的连接对象(每种连接N个,方便不同用户连接)

3.2 常用的连接池工具

注意: DataSource接口是Sun公司设计的用于规范连接池实现的接口。

连接池工具1DBCP ( Datatabse Connection Pool)

Apache组织的产品。Tomcat服务器的连接池默认实现

使用步骤:

1)导包

commons-dbcp-1.4.jar 核心包

commons-pool-1.5.6.jar 辅助包

2)创建连接池对象BasicDataSource对象

3)设置连接参数(urluserpassworddirverClass

4)设置连接池参数(初始连接数,最大连接数,最大等待时间)

5)获取连接对象(getConnection() 方法)

//1)创建dbcp连接池对象

BasicDataSource bds = new BasicDataSource();

BasicDataSource bds = (BasicDataSource)BasicDataSourceFactory.createDataSource(properties配置文件);

//配置文件的Key要与下面的setxxx一致。

//2)设置连接参数

bds.setUrl(url);

bds.setUsername(user);

bds.setPassword(password);

bds.setDriverClassName(driverClass);

//3)设置连接池参数

bds.setInitialSize(5);//初始化连接

bds.setMaxActive(10);//最大连接数

bds.setMaxWait(3000);//当超过最大连接数时,最大等待时间为3秒

Connection conn = bds.getConnection(); //从连接池中获取连接

conn.close();// 把连接对象放回连接池中的。

连接池工具2 C3P0

是开源框架(hibernate内置默认的连接池工具C3P0)

使用步骤:

1)导入c3p0jar

c3p0-0.9.1.2.jar 核心包

2)创建连接池对象ComboPooledDataSource对象

3)设置连接参数(urluserpassworddirverClass

4)设置连接池参数(初始连接数,最大连接数,最大等待时间)

5)获取连接对象(getConnection() 方法)

//1)创建连接池对象

ComboPooledDataSource cds = new ComboPooledDataSource();

/**

 * 使用xml配置文件读取c3p0的方法

 * 注意:

 * 1)需要把一个名称为c3p0-config.xml文件放在src目录下,c3p0会自动读取这个文件。

 * 2)xml配置文件中属性名称和手动设置方法名保持一致!!!!c3p0则会自动读取

 */

/**

* //1)创建连接池对象

 *   1)new ComboPooledDataSource(): 使用没有参数的构造方法,读取的是default-config的配置信息

 *   2)new ComboPooledDataSource(name的属性值): 使用有参的构造方法,读取的是name-config配置信息

//2)设置连接参数

cds.setJdbcUrl(url);

cds.setUser(user);

cds.setPassword(password);

cds.setDriverClass(driverClass);

//3)设置连接池相关的参数

cds.setInitialPoolSize(5);//初始化连接数

cds.setMaxPoolSize(10);//最大连接数

cds.setCheckoutTimeout(3000);//最大等待时间

cds.setMinPoolSize(3); //最小连接数

//4)获取连接

Connection conn = cds.getConnection();

//5)把连接对象放回连接池中

conn.close();

<c3p0-config>

<!-- 默认配置 -->

  <default-config>

   <!-- 连接参数 -->

     <property name="jdbcUrl">jdbc:mysql://localhost:3306/day18</property>

     <property name="user">root</property>

     <property name="password">root</property>

     <property name="driverClass">com.mysql.jdbc.Driver</property>

    

     <!-- 连接池参数 -->

     <property name="initialPoolSize">5</property>

     <property name="maxPoolSize">12</property>

     <property name="checkoutTimeout">5000</property>

     <property name="minPoolSize">3</property>

  </default-config>

<!-- 命名配置 -->

  <named-config name="oracle">

     <!-- 连接参数 -->

     <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>

     <property name="user">eric</property>

     <property name="password">123456</property>

     <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>

    

     <!-- 连接池参数 -->

     <property name="initialPoolSize">5</property>

     <property name="maxPoolSize">12</property>

     <property name="checkoutTimeout">5000</property>

     <property name="minPoolSize">3</property>

   </named-config>

</c3p0-config>

猜你喜欢

转载自www.cnblogs.com/fengfusheng/p/8998502.html