- 1,.为什么要选用JDBC(C3P0)?
- (1).最近在做大数量的数据处理,一般再对数据量超大的情况下做 插入 更新的时候 ,首先考虑的肯定是 存储过程 但我现在是分 2主库和6个从库(说白了就是6个数据库,一个数据库一台服务器,不在一个网段) 查从 从库查,更新到主库(select 从库 insert into主库),由于不在一个库里面,又不在一个网段,所以没法直接用存储过程,就得考虑通过JAVA实现,目前的打算 是把写好的方法打成JAR包, 直接运行就好了(菜注:JAVA Project 项目 打成的叫JAR包,WEB项目打成的包叫 WAR包[读音:”哇包“]),对 看来读的还挺准的,呦西~嗦嘎。
- (2).考虑效率问题,所以对大数据操作 越简单越好,直接用JDBC最好,一个字快(相对而言),既然用JDBC 就得考虑 选用好的连接池,目前就寡人知道的有好多 如。。。。。额 忘了名字了都TM英文好像叫(BoneCP :体积小,应用快,但驱动是加载到连接池之外的)(DBCP:太常用不介绍) 我这边用的是C3P0,为什么使用C3P0呢?答案很简单,老大让我用的。嘿嘿~~后来查询过C3P0确实很快,但C3P0有个BUG (我暂且说它しBUG)就是容易死锁。具体怎么样才回死锁,怎么才能比较有效的控制,后面我会把我自己实践中遇到得和大家说。
- 2.C3P0的详细配置?
- (1).我以前没弄过 网上一搜那么多字真是没心情看,真想找个项目直接下下来就好了,可那有这样的好事?对吧,这样对自己没好处 学不到东西撒,后来还是耐心的看了,会了其实很简单,真的,所以同学们一定要有耐心滴干货,你滴明白?想想 一般什么 什么驱动 连接池 的什么玩意的会有几个配置文件??没想出来?没事 这次记住。先猜猜 这鸟C3P0会有几个。放数据源的配置文件 肯定是一个以.xml(大家叫他 插卖哦~,所以咱也那么叫了~),驱动包(就是绝八代JAR包),还有啥?肯定还有一个读XML的java类 是吧。最起码要有这三个吧。记住要想。不想 看再多书都没用。
- (2).c3p0-config.xml 的配置
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 172.18.72.145从库(查)数据源 -->
<named-config name="data">
<property name="user">您的数据库账号</property>
<property name="password">您的数据库密码</property>
<property name="driverClass">oracle.jdbc.driver.OracleDriver</property><!--com.mysql.jdbc.Driver< -->
<property name="jdbcUrl">jdbc:oracle:thin:@172.18.72.145:1521:cntvora <!-- jdbc:mysql://172.18.72.46:3306/mysqlcntvora -->
</property>
<!-- 连接池初始化时建立的连接数 默认值是3 -->
<property name="initialPoolSize">10</property>
<!-- 连接的最大空闲时间 单位秒 默认是0-代表永远不会断开连接 超过设定时间的空闲连接将会断开 -->
<property name="maxIdleTime">0</property>
<!-- 连接池中拥有的最大连接数 默认值为15个 -->
<property name="maxPoolSize">100000</property>
<!-- 连接池中保持的最小连接数 默认值为3个 -->
<property name="minPoolSize">3</property>-->
<!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置 默认值为0代表不处理 单位秒 -->
<property name="maxIdleTimeExcessConnections">15</property>
<!--c3p0 是异步操作的,缓慢的JDBC操作通过帮助进程完成 扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。Default: 3 -->
<property name="numHelperThreads">3</property>
</named-config>
<c3p0-config>
(3)读取配置文件的JAVA类
注意事项:这是一个类 你可以建一个class 也叫DBManager 然后复制我的~
下面data 就引号里面的那玩意 是一个标示符 就是自己可以随便写 但要和 xml里面的 开头的 <named-config name="data"> 看到没要一样
你也可以写成别的随便啥都可以,当然项目中要考虑可读性的
public class DBManager {private static ComboPooledDataSource ds = new ComboPooledDataSource("data");
public static Connection getConnection() {
try {return ds.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);}
}
//下面是测试类 配置完了先main方法里面走一下 看不不能正常连接(啥叫正常连接??妈呀 不报错就算正常连接,
//还会出现一堆信息,黑字的哦~ 这样回答可以么?)
public static void main(String[] args) throws SQLException {
System.out.println(DBManager.getConnection());
//System.out.println(ds1.getConnection());
}
}
(4).c3p0-0.9.1.2.jar 下面有下载。(免积分的)
(5).好多人写到这一步就不写了,可不经常写的或者是菜鸟的话 有的还真不会调用呢,为了广大.......省1W字(附上最最简单的方法)
EMP表名 里面的字段しString类型的 换成你自己的测试看看就可以了
public class SELECT_EMP_BY_ID {
static Connection conn = null;
static ResultSet rs = null;
static PreparedStatement pstmt = null;
public static void Select() throws Exception {
conn = DBManager.getConnection();
try {
pstmt = conn.prepareStatement("select *from EMP");
rs=pstmt.executeQuery()
while(rs.next()){
rs.getString(1);
rs.getString(2);
rs.getString(3);
}
rs.close();
pstmt.close()
conn.close();
}catch SQLException e) {
}
}
别找了 俺在这-----------------------c3p0-0.9.1.2.jar
以上是我简化处理过的的 配置 簡単实用,肯定还会有人弄不好,这个我知道的 因为俺就是这样的人 嘿嘿~~但我写的很详细了,只要有一点 记住是一点点的JAVA 基础 都能配置成功,除非你没有整过JDBC 那我就无话可说了。
注:文中出现错别字,或者脏话等莫怪~转载请注明出处
--苏州 黑无常