首先需要准备三个依赖包 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 一个数据库链接的例子的更多相关文章

  1. kettle使用命令行传入数据库链接参数(ip、数据库、端口、用户、密码)执行job时子转换失败。

    使用cmd 传参数执行 kettle job 遇到错误: 错误原因,无法找到文件.... 原来使用,通过目录指定转换,好处是:当以文件资源库保存时,可以直接将文件夹复制走,直接运行就可以,不需要单独针 ...

  2. 数据库链接池c3p0的配置

    由于我看的是远古教程,所以里面各种驱动jar包还有c3p0包都是远古版本,对于最新版本的jdbc已经失去的作用,所以我在这里重写一下! 1.首先是c3p0的位置,package的外面,src的里面 2 ...

  3. Oracle 数据库链接

    SQL> CREATE DATABASE LINK   mydblink 2    CONNECT TO   test   IDENTIFIED BY   test123 3    USING  ...

  4. JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)

    @ 目录 前言 数据的持久化 Java数据存储技术 JDBC介绍 JDBC体系结构 获取数据库链接 Driver接口 加载注册JDBC驱动 获取数据库链接 数据库链接方式(实例) 方式一:代码中显示出 ...

  5. 怎样用SQL语句查询一个数据库中的所有表?

    怎样用SQL语句查询一个数据库中的所有表?  --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...

  6. [SQL]复制数据库某一个表到另一个数据库中

    SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...

  7. 利用Sql实现将指定表数据导入到另一个数据库示例

    因为工作中经常需要将数据从一个数据库导入到另一个数据库中,所以将这个功能写成一个存储过程,以方便调用.现在粘贴出来供大家参考: 注意:1,以下示例中用到了syscolumns,sysobjects等系 ...

  8. (转载)在Delphi中利用MSDASC来配置数据库链接

    在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...

  9. 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移

    在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...

随机推荐

  1. nginx实现简单负载均衡

    配置文件 主文件: /etc/nginx/nginx.config 例当前在22.22.22.4服务器 //同时开另外三个服务器 可以在http{} 里添加 include /etc/nginx/si ...

  2. java/eclipse/myeclipse建立.properties文件的方法

      相比较来说,Java程序的编写相对简单很多,多数文件都可以通过编写文本文件生成!     对于不用IDE的java程序来讲,只需要右键新建>文本文件,建立好以后写好代码,另存为xx.prop ...

  3. java中int取值范围是怎么计算的?

    首先jdk中定义int占4个字节 ===> 32位(后面全部的计算都是以此为根据的) 32位就是jvm仅仅给分配32个格子的空间,用以存放数据. 总所周知计算机中用0和1存放数据. 那么,32个 ...

  4. chrome.webRequest

    chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截.阻止或修改请求.  可用版本: 从 Chrome 17 开始支持.  权 ...

  5. rails执行sidekiq任务的时候报错“can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock'”

    rails执行sidekiq任务的时候报错“can't connect to local mysql server through socket '/var/run/mysqld/mysqld.soc ...

  6. Win7开机提示group policy client无法登陆怎么办

    1 开机按F8,进入安全模式 2 进入系统之后运行注册表,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Prof ...

  7. Python工作日类库Busines Holiday介绍

    引言: 在日常工作中.常常会碰到相似的场景.须要计算在某个时间段内的工作日以及确定某天是否为工作日,这里的介绍的工具包将很好的解决问题. 1. 工具包Business Holiday介绍 其提供了很e ...

  8. GetCursorPos

      获取桌面坐标 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  9. iOS设备定位服务开启判定

    应用CLLocationManager 的两个方法 [CLLocationManagerlocationServicesEnabled] 判断设备是否开启定位功能 [CLLocationManager ...

  10. iOS/iphone开发如何为苹果开发者帐号APPID续费

    原文地址:iOS/iphone开发如何为苹果开发者帐号APPID续费作者:陈双超_群雄 其实相当的简单,这篇内容是给财务看的,有的地方连我自己看了都感觉有点...但如果不详细,她又要为难我,所以我就当 ...