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 ...
随机推荐
- linux下的udev是干嘛的,能否说的通俗点
转:http://www.360doc.com/content/11/0415/21/1317564_109924863.shtml 早期的linux的/dev目录下有一大堆设备文件,不管你的主机上是 ...
- 【转】Points To Line
原文地址 Python+Arcpy操作Points(.shp)转换至Polyline(.shp),仔细研读Points To Line (Data Management)说明,参数说明如下: Inpu ...
- Ubuntu下Wine使用教程
转自:http://blog.csdn.net/wangchangshuai0010/article/details/12057251 用了段时间的Ubuntu,感觉很好!可是工作的时候还是要用到 w ...
- Flash&Flex大全
官方在线帮助(没标英文的都是中文) 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 更多参考使这样的链接下载离线版:http://help.adobe.co ...
- meteor学习-- #一 安装meteor快速使用
下载安装 curl https://install.meteor.com/ | sh meteor会自动下载mongodb和其他需要依赖的库,不需要手动安装. 如果是Windows 的用户,请使用 m ...
- MFC进度条刷新处理
m_p.SetRange(0,1000); m_p.SetStep(1); for (int i=0;i<1001;i++) { m_p.SetPos(i); Sleep(10); MSG ms ...
- webService 三要素
WebService(jax-ws)三要素 SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式. WSDL: 用来描述如何访问具体的服务.(相当于说明书) UDDI: 用户自己可以按UD ...
- [Eclipse插件] Eclipse设置Tab键为空格(ctrl+shirt+f格式化生效)!
自定义format格式,用空格替换Tab键,ctrl+shit+f格式化后生效: 设置Eclipse中按Tab键为4个空格,这里标记下! Window-->Preferences-->Ja ...
- springCloud微服务使用
一.微服务简介 1.演变过程:单体架构.SOA.微服务 2.单体架构:一个应用包含了应用之间所有的功能程序,通过打成war包的方式发布部署. 缺点:复杂性逐渐偏高.技术债务逐渐变慢.阻碍技术的创新扩展 ...
- Ubuntu上安装samba不能安装的问题,“下列的软件包有不能满足的依赖关系”
前阵子,雨林木风版ubuntu下安装samba的问题,现在写出来分享一下. root@ubuntu:~# apt-get install samba正在读取软件包列表... 完成正在分析软件包的依赖关 ...