java学习笔记—c3p0连接池与元数据分析(42)
第一步:导入c3p0包
第二步:在classpath目录下,创建一个c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,只可以出现一次 -->
<default-config>
<!-- 连接超时设置30秒 -->
<property name="checkoutTimeout">30000</property>
<!-- 30秒检查一次connection的空闲 -->
<property name="idleConnectionTestPeriod">30</property>
<!--初始化的池大小 -->
<property name="initialPoolSize">2</property>
<!-- 最多的一个connection空闲时间 -->
<property name="maxIdleTime">30</property>
<!-- 最多可以有多少个连接connection -->
<property name="maxPoolSize">10</property>
<!-- 最少的池中有几个连接 -->
<property name="minPoolSize">2</property>
<!-- 批处理的语句
-->
<property name="maxStatements">50</property>
<!-- 每次增长几个连接 -->
<property name="acquireIncrement">3</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
<![CDATA[jdbc:mysql://127.0.0.1:3306/db909?useUnicode=true&characterEncoding=UTF-8]]>
</property>
<property name="user">root</property>
<property name="password">1234</property>
</default-config>
</c3p0-config>
第三步:创建工厂类获取这个连接
package cn.itcast.utils;
import java.sql.Connection;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DataSourceUtils {
private static DataSource ds;
static{
ds = //默认的读取c3p0-config.xml中默认配置
new ComboPooledDataSource();
}
public static DataSource getDatasSource(){
return ds;
}
public static Connection getConn(){
Connection con = null;
try{
con = ds.getConnection();//每一次从ds中获取一个新的连接
}catch(Exception e){
e.printStackTrace();
}
return con;
}
}
ComboPooledDataSource有三个构造:
没有参数的.
接收一个boolean
默认的情况下,为true,即所有connection.autoCommit属性为true.
接收一个字符串的
在一个c3p0-config.xml文件中中,可以配置多种连接。 除了默认连接,其他都叫命名的连接。通过
<named-config name=”xxxx”/>
指定一个命名连接:
<!-- 默认配置,只可以出现一次 -->
<named-config name="db909">
<property name="checkoutTimeout">1000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">2</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">5</property>
<property name="minPoolSize">2</property>
<property name="maxStatements">50</property>
<property name="acquireIncrement">3</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
<![CDATA[jdbc:mysql://127.0.0.1:3306/db909?useUnicode=true&characterEncoding=UTF-8]]>
</property>
<property name="user">root</property>
<property name="password">1234</property>
</named-config>
在代码中通过命名的连接连接数据库:
ds =
new ComboPooledDataSource("db909");
总结:
C3p0连接池,只有当用户获取连接时,才会包装Connection。
元数据分析
元数据,是指仅拥有Connection一个对象的情况下,分析得出数据库的所有信息。
DataBaseMetadate - 说明数据库的信息。
ResultSetMetadate - 说明数据结果的类型信息的。核心。
如果要进行元数据分析,就必须要使用statement,preparedstatement.
List<Map> list = run.query(“select * from users”,new MapListHandler());
[{id=”U001”,Name=”Jack”,pwd=”ddd”}….]
List<Bean> list = run.query(“select * from users”,new BeanListHanderl<User>(User.class));
[User=[id=dd],,,,,]
将某个指定的数据库中的所有表及数据导出到excel中.
CREATE VIEW uc AS
SELECT u.name AS uname,c.name AS cname
FROM users u INNER JOIN contacts c ON u.id=c.uid;
1、用databasemetadate分析数据库的数据
public void dbm() throws Exception{
Connection con = DataSourceUtils.getConn();
DatabaseMetaData dm= con.getMetaData();
// ResultSet rs= dm.getCatalogs();//获取所有数据库名称
// while(rs.next()){
// String name = rs.getString("TABLE_CAT");
// System.err.println(name);
// }
// System.err.println("======================");
String dbName = dm.getDatabaseProductName();//数据库名称
System.err.println(dbName);
System.err.println("数据库中有多少表:");
ResultSet rs2 = dm.getTables("db909","db909",null,new String[]{"TABLE"});
while(rs2.next()){
String tableName = rs2.getString("TABLE_NAME");
System.err.println(tableName);
}
}
2、用ResultSetMetadate分析结果集
此类是用来分析查询的结果集:
分析有几个列,列名,列的类型是什么?
@Test
public void rs2() throws Exception{
Connection con = DataSourceUtils.getConn();
//转到exam数据库中去
Statement st = con.createStatement();
st.execute("use exam");
//查询
String sql = "select * from dept";
ResultSet rs = st.executeQuery(sql);
//对rs结果集进行分析
ResultSetMetaData rsmd=rs.getMetaData();
//获取有几个列
int cols = rsmd.getColumnCount();
System.err.println(cols);
//获取每一个字段名
List<String> colNames = new ArrayList<String>();//保存所有的字段
for(int i=0;i<cols;i++){
String colName = rsmd.getColumnName(i+1);
System.err.print(colName+"\t\t");
colNames.add(colName);
}
System.err.println();
//获取数据
while(rs.next()){
for(String nm:colNames){//遍历一行中的所列
String val = rs.getString(nm);
System.err.print(val+"\t\t");
}
System.err.println();
}
con.close();
}
java学习笔记—c3p0连接池与元数据分析(42)的更多相关文章
- java学习笔记—标准连接池的实现(27)
javax.sql.DataSource. Java.sql.* DataSource 接口由驱动程序供应商实现.共有三种类型的实现: 基本实现 - 生成标准的 Connection 对象 – 一个D ...
- Java中使用C3P0连接池
先看官网给的范例: import java.sql.*; import javax.naming.*; import javax.sql.DataSource; import com.mchange. ...
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
- java学习笔记—第三方数据库连接池包1(29)
第一步:导入dbcp包 第二步:通过核心类连接数据 BasicDataSource它是javax.sql.DataSrouce的子类. 一个工具类:BasicDataSourceFactory. 手工 ...
- Spring之c3p0连接池配置和使用
1.导入包:c3p0和mchange包 2.代码实现方式: package helloworld.pools; import com.mchange.v2.c3p0.ComboPooledDataSo ...
- C3P0连接池工具类实现步骤及方法
C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包 ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- java学习笔记41(数据库连接池 C3p0连接池)
在之前的学习中,我们发现,我们需要频繁的创建连接对象,用完之后还需要在关闭资源,因为这些连接对象都是占资源的,但是又不得不创建,比较繁琐,为了解决这种情况,Java出现了数据库连接池: 数据库连接池的 ...
- Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate
连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...
随机推荐
- 小学生轻松做题App
作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具:墨刀 原型模型链接:https://modao.cc/ ...
- 在Eclipse中创建Maven版的Web工程
步骤: 1.第一步 2.第二步 3.第三步 4.第四步 选中项目,右键在弹出的对话框中选择properties 5.第五步 6.第六步
- rundeck
docker run -d -p 4440:4440 -e EXTERNAL_SERVER_URL=http://109.105.4.65:4440 -v/root/rundeck:/var/rund ...
- 牛X的FieldBlur
[牛X的FieldBlur] Use Field Blur to build a gradient of blurs, by defining multiple blur points with di ...
- Matlab中插值函数汇总(下)
Matlab中插值函数汇总分上下两个部分,主要整合自matlabsky论坛dynamic发表于2009-2-21 21:53:26 的主题帖,以及豆丁网rickoon上传的教材第8章<插值,拟合 ...
- Linux 下批量创建用户(shell 命令)
第一种方法: 用shell批量创建用户,分为2中:1,批量创建的用户名无规律 :2.批量创建的用户名有规律首先,来说下批量创建的用户名无规律的shell:先把需要批量创建的用户名用一个文本文档列出来, ...
- Multithreading in C
Multithreading in C, POSIX(可移植操作系统接口Portable Operating System Interface X ) style Multithreading - A ...
- oracle 建立表空间和用户
.建立表空间, create tablespace "NETHRA" DATAFILE 'D:\DataBase\Oracle\iClass\iclass\iclass.DBF' ...
- ImageView.src的png图标变形问题
图标,必须是png-24输出,如果是png-8输出,则失真.
- centos7下查看tomcat是否启动/系统日志等
centos7下查看tomcat是否启动/系统日志等 方法一: 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown ...