c3p0 一个数据库链接的例子
首先需要准备三个依赖包 c3p0-0.9.5.2.jar、mchange-commons-java-0.2.11.jar、mysql-connector-java-5.1.47.jar
下载链接 https://files.cnblogs.com/files/ruber/lib.rar
public class testMysql implements myRoot{
private ComboPooledDataSource dataSource = null;
// private Connection connection = null;
@Override
public void done() {
initMysql(); Connection connection = getConnection();//获取自动提交数据库连接
setAutoCommit(connection, true); String name = doSql(connection, String.class, "select playerName from t_player where playerId = ?", 2);
System.out.println("name = " + name); tplayer player = doSql(connection, tplayer.class, "select * from t_player where playerId = ?", 2); System.out.println("getPlayerId = " + player.getPlayerId());
System.out.println("getPlayerName = " + player.getPlayerName());
System.out.println("getCreateTime = " + player.getCreateTime());
System.out.println("getLoginTime = " + player.getLoginTime());
System.out.println("getLogoutTime = " + player.getLogoutTime()); //--------批量提交sql------------- String Ary[] = new String[2];
Ary[0] = "UPDATE t_player SET playerName = \"ccc\" WHERE playerId = 3;";
Ary[1] = "UPDATE t_player SET playerName = \"ddd\" WHERE playerId = 4;"; batchSql(connection, Ary);
closeConnection(connection);//关闭连接 }
//批量提交处理事务
public void batchSql(Connection connection, String []Ary){
Statement st = null;
try {
setAutoCommit(connection, false);//必须为false,否则java.sql.SQLException: Can't call commit when autocommit=true
st = connection.createStatement(); int c=0;
for(String sql:Ary){
st.addBatch(sql);
c++;
if(c == 1000){//防止内存溢出,一次不要提交太多条,暂设1000条
st.executeBatch();
commit(connection);
st.clearBatch();
c=0;
}
if(c>0){
st.executeBatch();
commit(connection);
st.clearBatch();
}
} } catch (SQLException e) {
e.printStackTrace();
}finally{
setAutoCommit(connection, true);
closeStateMent(st);
}
} /**
* @param cls 返回类型类
* @param sql sql语句
* @param paramter sql语句参数
* @return cls实例
*/
@SuppressWarnings("unchecked")
public <T>T doSql(Connection connection, Class<?> cls, String sql, Object... paramter){
PreparedStatement pst = null;
ResultSet rs = null; Object obj = null;
try {
pst = connection.prepareStatement(sql);//创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库
if(paramter != null && paramter.length > 0){
int i=1;//从1开始
for(Object parm: paramter){
pst.setObject(i++, parm);//为sql语句设置参数
}
}
rs = pst.executeQuery();//执行语句,返回ResultSet结果
while(rs.next()){
if(cls.getSimpleName().toLowerCase().equals("string")){//标准类型
obj = rs.getString(1);
}else{//自定义类型
obj = cls.newInstance();//创建自定义类型
ResultSetMetaData resultsetmetadata = rs.getMetaData();//整行列信息
int count = resultsetmetadata.getColumnCount();//列数量
for(int i=1; i<=count; i++){//从1开始
String columnlabel = resultsetmetadata.getColumnLabel(i);//当前列标头
String methName = "set" + columnlabel.substring(0, 1).toUpperCase() + columnlabel.substring(1);//自定义类型的方法名,次数为set方法 Method[] methods = cls.getDeclaredMethods();//自定义类型的方法数组
int methodsSize = methods.length;//方法数量
for(int j=0; j<methodsSize; j++){
if(methods[j].getName().equals(methName)){
Parameter[] parameterAry = methods[j].getParameters();//获取方法参数数组
Class<?> type = parameterAry[0].getType();//第一个参数类型 从0开始
String typeName = type.getSimpleName().toLowerCase();//参数类型的名字
// String typeName = methods[j].getParameters()[0].getType().getSimpleName().toLowerCase();//这种写法不被推荐
//反射调用
if(typeName.equals("int")){
methods[j].invoke(obj, rs.getInt(i));
}else if(typeName.equals("string")){
methods[j].invoke(obj, rs.getString(i));
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(pst != null){ pst.close(); }
if( rs != null){ rs.close(); }
} catch (SQLException e) {
e.printStackTrace();
}
}
return (T) obj;
}
public void initMysql(){ dataSource = new ComboPooledDataSource();
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");//com.mysql.jdbc.Driver
} catch (PropertyVetoException e) {
e.printStackTrace();
}
dataSource.setJdbcUrl("jdbc:mysql://192.168.50.229:3306/banzhan_tplayer?autoReconnect=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false");//
dataSource.setUser("root");//root
dataSource.setPassword("123456");//
dataSource.setInitialPoolSize(1);//5 数量机器相关
dataSource.setMinPoolSize(1);
dataSource.setMaxPoolSize(1);
dataSource.setTestConnectionOnCheckin(true); //每次获取connection测试其有效性
dataSource.setAutomaticTestTable("C3P0TestTable"); //测试表
dataSource.setIdleConnectionTestPeriod(360); //每N秒检查一次空闲连接
dataSource.setMaxIdleTime(720);
} public Connection getConnection(){
Connection connection = null;
if(dataSource != null){
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
return connection;
} public void setAutoCommit(Connection connection, boolean autoCommit){ try {
connection.setAutoCommit(autoCommit);
} catch (SQLException e) {
e.printStackTrace();
} } public void commit(Connection connection){
try {
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeStateMent(Statement pst){
if(pst != null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public void closeConnection(Connection connection){
try {
if(connection != null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
c3p0 一个数据库链接的例子的更多相关文章
- kettle使用命令行传入数据库链接参数(ip、数据库、端口、用户、密码)执行job时子转换失败。
使用cmd 传参数执行 kettle job 遇到错误: 错误原因,无法找到文件.... 原来使用,通过目录指定转换,好处是:当以文件资源库保存时,可以直接将文件夹复制走,直接运行就可以,不需要单独针 ...
- 数据库链接池c3p0的配置
由于我看的是远古教程,所以里面各种驱动jar包还有c3p0包都是远古版本,对于最新版本的jdbc已经失去的作用,所以我在这里重写一下! 1.首先是c3p0的位置,package的外面,src的里面 2 ...
- Oracle 数据库链接
SQL> CREATE DATABASE LINK mydblink 2 CONNECT TO test IDENTIFIED BY test123 3 USING ...
- JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)
@ 目录 前言 数据的持久化 Java数据存储技术 JDBC介绍 JDBC体系结构 获取数据库链接 Driver接口 加载注册JDBC驱动 获取数据库链接 数据库链接方式(实例) 方式一:代码中显示出 ...
- 怎样用SQL语句查询一个数据库中的所有表?
怎样用SQL语句查询一个数据库中的所有表? --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...
- [SQL]复制数据库某一个表到另一个数据库中
SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...
- 利用Sql实现将指定表数据导入到另一个数据库示例
因为工作中经常需要将数据从一个数据库导入到另一个数据库中,所以将这个功能写成一个存储过程,以方便调用.现在粘贴出来供大家参考: 注意:1,以下示例中用到了syscolumns,sysobjects等系 ...
- (转载)在Delphi中利用MSDASC来配置数据库链接
在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...
- 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移
在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...
随机推荐
- redis节点管理-节点的移除
原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg13.html 节点的移除 和节点添加一样,移除节点也有移除主节点,从节点. 1.移除主节点 移除节点使 ...
- 在 Ubuntu 14.04 上安装 Ubuntu Tweak 0.8.8
转自:http://linux.cn/article-3335-1.html 关于 Ubuntu Tweak,Ubuntu 老用户再熟悉不过了,Ubuntu tweak 相当于 windows 的优化 ...
- 在代码中加载storyBoard中的ViewController
首先, 要在storyBoard中画出想要的VC, 然后建一个VC类和他关联.如图 : 调用时找如下写: DetailViewController *detailVC = [[UIStoryboard ...
- windows 配置环境变量快捷方式
在 Windows 设置环境变量 在环境变量中添加软件A的目录: 在命令提示框中(cmd) : 输入 path %path%;C:\A, 按下"Enter". 注意: C:\A是软 ...
- IntelliJ IDEA的几种常见的快捷键
在编写代码的时候直接输入psv就会看到一个psvm的提示,此时点击tab键一个main方法就写好了. psvm 也就是public static void main的首字母. 依次还有在方法体内键入f ...
- 【LaTeX】E喵的LaTeX新手入门教程(3)数学公式
昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er ...
- request.startAsync()不支持异步操作
Servlet3.0使用异步处理时,后台报错: java.lang.IllegalStateException: A filter or servlet of the current chain do ...
- ms sql 在任何位置 添加列
摘自: http://bbs.csdn.net/topics/40236129 在任何位置插入列:create proc addcolumn@tablename varchar(30), --表名@ ...
- Apache2.4 与 php7.1.6的链接
首先Apache已经安装成功,在浏览器中能够打开再下载php 我的Apache安装版本为Apache2.4.26 x64 vc14 所以我php也应该是vc14编译的 php下载地址为 http:// ...
- Java笔记18:JUnit单元测试
1 从http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下载最新的junit包. ...