首先需要准备三个依赖包 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. js禁止复制粘贴

    1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键,其实是禁止快捷菜单,因为不光右键可以弹出这个菜单,键盘上空格 ...

  2. The file “Info.plist” couldn’t be opened because there is no such file

    修改了Info.plist的实际文件位置(项目和单元测试对应不同的Info.plist),报错 (null): could not read data from '/Users/xxxxx/Deskt ...

  3. attribute用法

    attribute 用法 摘要: 在学习linux内核代码及一些开源软件的源码(如:DirectFB),经常可以看到有关__attribute__的相关使用.本文结合自己的学习经历,较为详细的介绍了_ ...

  4. Android检测网络连接

    Android检测网络连接 import android.app.AlertDialog; import android.content.Context; import android.content ...

  5. AQTime教程

    1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行时关键的性能信息和 ...

  6. centos7 yum安装redis(转)

    正如我们所知的那样,Redis是一个开源的.基于BSD许可证的,基于内存的.键值存储NoSQL数据库.Redis经常被视为一个数据结构服务器,因为Redis支持字符串strings.哈希hashes. ...

  7. Spark2-对于Null/Nan的处理

    一.几种查找空值的方法 1.Column方法 column.isNull/column.isNotNull/column.isNaN 2.类sql方法 二.na方法 2.1 na.drop方法 2.1 ...

  8. 十个书写Node.js REST API的最佳实践(下)

    收录待用,修改转载已取得腾讯云授权 5. 对你的Node.js REST API进行黑盒测试 测试你的REST API最好的方法之一就是把它们当成黑盒对待. 黑盒测试是一种测试方法,通过这种方法无需知 ...

  9. supervise 用来监控服务,自动启动

    Atong介绍的这个工具,挺好用的.supervise 官方网站: https://cr.yp.to/daemontools.html cd /data/test cat test.c #includ ...

  10. [TypeScript] Work with DOM Elements in TypeScript using Type Assertions

    The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...