元数据,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();//获取参数元数据
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(.....): 用于更新操作(DDL、DML)
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公司设计的用于规范连接池实现的接口。
连接池工具1:DBCP ( Datatabse Connection Pool)
是Apache组织的产品。Tomcat服务器的连接池默认实现
使用步骤:
1)导包
commons-dbcp-1.4.jar 核心包
commons-pool-1.5.6.jar 辅助包
2)创建连接池对象BasicDataSource对象
3)设置连接参数(url,user,password,dirverClass)
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)导入c3p0的jar包
c3p0-0.9.1.2.jar 核心包
2)创建连接池对象ComboPooledDataSource对象
3)设置连接参数(url,user,password,dirverClass)
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>
|