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 ...
随机推荐
- Afreechart很强大的图表库,支持股票曲线图,饼图,曲线
Afreechart是一个很强大的图表库,支持股票曲线图,饼图,曲线等.源码下载:http://www.23code.com/afreechart/
- 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...
- linux面试题目—2
linux面试题目—2 二 选择题 1.关闭linux系统(不重新启动)可使用命令 B . A Ctrl+Alt+Del B halt C shutdown -r now D reboot 2.实现从 ...
- LaTeX 的对参考文献的处理
LaTeX 的对参考文献的处理实在是非常的方便,我用过几次,有些体会,写出来供大家 参考.当然,自己的功力还不够深,有些地方问题一解决就罢手了,没有细究. LaTeX 对参考文献的处理有这 ...
- ashx 下载文件
ashx后台 byte[] file =GetFileByte(""); Response.ContentType = "application/octet-stream ...
- 本地环境 XAMPP+phpStorm+XDebug+chrome配置和断点调试
不明白phpStorm+XAMPP+chrome组合的phpStorm配置XDebug的断点调试,很多种网页办法都看过了,可用,但没达预期.QQ群问,一个大牛很奇怪我都配置了怎么还不正确,很干脆地说远 ...
- SqlServer数据库1433端口问题1
在本地使用telnet ip 1433 命令测试数据库1433端口是否打开,总是提示错误,根据网上查找资料总结了如下两点思路供参考,欢迎指正! (1)第一种情况可能是"Telnet客户端& ...
- Dx12 occlusion query
https://github.com/Microsoft/DirectX-Graphics-Samples/blob/master/Samples/Desktop/D3D12PredicationQu ...
- Vue侦听器watch
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器.这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化.当需要在数据变化时执行异步或开销较大的操作时,这 ...
- 【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践
supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord --no ...