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

  1 public class testMysql implements myRoot{
  2     private ComboPooledDataSource dataSource = null;
  3 //    private Connection connection = null;
  4     @Override
  5     public void done() {
  6         initMysql();
  7
  8         Connection connection = getConnection();//获取自动提交数据库连接
  9         setAutoCommit(connection, true);
 10
 11         String name = doSql(connection, String.class, "select playerName from t_player where playerId = ?", 2);
 12         System.out.println("name = " + name);
 13
 14         tplayer player = doSql(connection, tplayer.class, "select * from t_player where playerId = ?", 2);
 15
 16         System.out.println("getPlayerId = " + player.getPlayerId());
 17         System.out.println("getPlayerName = " + player.getPlayerName());
 18         System.out.println("getCreateTime = " + player.getCreateTime());
 19         System.out.println("getLoginTime = " + player.getLoginTime());
 20         System.out.println("getLogoutTime = " + player.getLogoutTime());
 21
 22         //--------批量提交sql-------------
 23
 24         String Ary[] = new String[2];
 25         Ary[0] = "UPDATE t_player SET playerName = \"ccc\" WHERE playerId = 3;";
 26         Ary[1] = "UPDATE t_player SET playerName = \"ddd\" WHERE playerId = 4;";
 27
 28         batchSql(connection, Ary);
 29         closeConnection(connection);//关闭连接
 30
 31     }
 32     //批量提交处理事务
 33     public void batchSql(Connection connection, String []Ary){
 34         Statement st = null;
 35         try {
 36             setAutoCommit(connection, false);//必须为false,否则java.sql.SQLException: Can‘t call commit when autocommit=true
 37             st = connection.createStatement();
 38
 39             int c=0;
 40             for(String sql:Ary){
 41                 st.addBatch(sql);
 42                 c++;
 43                 if(c == 1000){//防止内存溢出,一次不要提交太多条,暂设1000条
 44                     st.executeBatch();
 45                     commit(connection);
 46                     st.clearBatch();
 47                     c=0;
 48                 }
 49                 if(c>0){
 50                     st.executeBatch();
 51                     commit(connection);
 52                     st.clearBatch();
 53                 }
 54             }
 55
 56         } catch (SQLException e) {
 57             e.printStackTrace();
 58         }finally{
 59             setAutoCommit(connection, true);
 60             closeStateMent(st);
 61         }
 62     }
 63
 64     /**
 65      * @param cls 返回类型类
 66      * @param sql sql语句
 67      * @param paramter sql语句参数
 68      * @return cls实例
 69      */
 70     @SuppressWarnings("unchecked")
 71     public <T>T doSql(Connection connection, Class<?> cls, String sql, Object... paramter){
 72         PreparedStatement pst = null;
 73         ResultSet rs = null;
 74
 75         Object obj = null;
 76         try {
 77             pst = connection.prepareStatement(sql);//创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库
 78             if(paramter != null && paramter.length  > 0){
 79                 int i=1;//从1开始
 80                 for(Object parm: paramter){
 81                     pst.setObject(i++, parm);//为sql语句设置参数
 82                 }
 83             }
 84             rs = pst.executeQuery();//执行语句,返回ResultSet结果
 85             while(rs.next()){
 86                 if(cls.getSimpleName().toLowerCase().equals("string")){//标准类型
 87                     obj = rs.getString(1);
 88                 }else{//自定义类型
 89                     obj = cls.newInstance();//创建自定义类型
 90                     ResultSetMetaData resultsetmetadata = rs.getMetaData();//整行列信息
 91                     int count = resultsetmetadata.getColumnCount();//列数量
 92                     for(int i=1; i<=count; i++){//从1开始
 93                         String columnlabel = resultsetmetadata.getColumnLabel(i);//当前列标头
 94                         String methName = "set" + columnlabel.substring(0, 1).toUpperCase() + columnlabel.substring(1);//自定义类型的方法名,次数为set方法
 95
 96                         Method[] methods = cls.getDeclaredMethods();//自定义类型的方法数组
 97                         int methodsSize = methods.length;//方法数量
 98                         for(int j=0; j<methodsSize; j++){
 99                             if(methods[j].getName().equals(methName)){
100                                 Parameter[] parameterAry = methods[j].getParameters();//获取方法参数数组
101                                 Class<?> type = parameterAry[0].getType();//第一个参数类型 从0开始
102                                 String typeName = type.getSimpleName().toLowerCase();//参数类型的名字
103 //                                String typeName = methods[j].getParameters()[0].getType().getSimpleName().toLowerCase();//这种写法不被推荐
104                                 //反射调用
105                                 if(typeName.equals("int")){
106                                     methods[j].invoke(obj, rs.getInt(i));
107                                 }else if(typeName.equals("string")){
108                                     methods[j].invoke(obj, rs.getString(i));
109                                 }
110                             }
111                         }
112                     }
113                 }
114             }
115         } catch (Exception e) {
116             e.printStackTrace();
117         }finally{
118             try {
119                 if(pst != null){ pst.close(); }
120                 if( rs != null){ rs.close();  }
121             } catch (SQLException e) {
122                 e.printStackTrace();
123             }
124         }
125         return (T) obj;
126     }
127     public void initMysql(){
128
129         dataSource = new ComboPooledDataSource();
130         try {
131             dataSource.setDriverClass("com.mysql.jdbc.Driver");//com.mysql.jdbc.Driver
132         } catch (PropertyVetoException e) {
133             e.printStackTrace();
134         }
135         dataSource.setJdbcUrl("jdbc:mysql://192.168.50.229:3306/banzhan_tplayer?autoReconnect=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false");//
136         dataSource.setUser("root");//root
137         dataSource.setPassword("123456");//123456
138         dataSource.setInitialPoolSize(1);//5 数量机器相关
139         dataSource.setMinPoolSize(1);
140         dataSource.setMaxPoolSize(1);
141         dataSource.setTestConnectionOnCheckin(true);        //每次获取connection测试其有效性
142         dataSource.setAutomaticTestTable("C3P0TestTable");    //测试表
143         dataSource.setIdleConnectionTestPeriod(360);        //每N秒检查一次空闲连接
144         dataSource.setMaxIdleTime(720);
145     }
146
147     public Connection getConnection(){
148         Connection connection = null;
149         if(dataSource != null){
150             try {
151                 connection =  dataSource.getConnection();
152             } catch (SQLException e) {
153                 e.printStackTrace();
154             }
155         }
156         return connection;
157     }
158
159     public void setAutoCommit(Connection connection, boolean autoCommit){
160
161         try {
162             connection.setAutoCommit(autoCommit);
163         } catch (SQLException e) {
164             e.printStackTrace();
165         }
166
167     }
168
169     public void commit(Connection connection){
170         try {
171             connection.commit();
172         } catch (SQLException e) {
173             e.printStackTrace();
174         }
175     }
176     public void closeStateMent(Statement pst){
177         if(pst != null){
178             try {
179                 pst.close();
180             } catch (SQLException e) {
181                 e.printStackTrace();
182             }
183         }
184     }
185
186     public void closeConnection(Connection connection){
187         try {
188             if(connection != null){
189                 connection.close();
190             }
191         } catch (SQLException e) {
192             e.printStackTrace();
193         }
194     }
195 }

原文地址:https://www.cnblogs.com/ruber/p/10297980.html

时间: 2024-10-06 10:12:02

c3p0 一个数据库链接的例子的相关文章

php mysql 数据库链接简单例子

这里是面向过程的mysql链接,两个文件,config.php和conn.php,只是记录一下,不喜勿喷,也希望有好的建议,代码如下: config.php <?php     /*     * 与数据库链接有关的配置变量保存在这个文件里面,方便以后开发的修改     * 这里只是部分配置     * **/    $hostname='localhost';     $username='root';    $password='';     $database='aa'; ?> conn.

QSqlDatabase数据库链接

数据库链接相关介绍: QSqlDatabase类的一个对象,代表一个数据库链接,这个链接与某个物理.db文件相连接. 一个.db文件可以与多个数据库链接相连,即能与多个QSqlDatabase类对象相连 连接.db文件和数据库链接的函数:setDatabaseName(tr("database.db")); 这里的参数 database.db 就是要连接的.db文件的路径,对,是路径+文件名.默认路径为当前路径,一般在build...debug或release文件夹中. 这个函数属于Q

使用hibernate连接mysql后发现有很多数据库链接,而不是一个链接

很熟数据库链接,但是都是sleep的 我反复执行这一个代码段后就这样了 原文地址:https://www.cnblogs.com/jnhs/p/9989244.html

Oracle 数据库链接

SQL> CREATE DATABASE LINK   mydblink 2    CONNECT TO   test   IDENTIFIED BY   test123 3    USING '(DESCRIPTION = 4      (ADDRESS_LIST = 5        (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.1.210)(PORT = 1521))) 6        (CONNECT_DATA = (SERVICE_NAME = o

PostgreSQL创建一个数据库

看看你能否访问数据库服务器的第一个例子就是试着创建一个数据库.一台运行着的 PostgreSQL 服务器可以管理许多数据库.通常我们会为每个项目和每个用户单独使用一个数据库. 节点管理员可能已经为你创建了可以使用的数据库.他应该已经告诉你这个数据库的名字.如果这样你就可以省略这一步,并且跳到下一节. 要创建一个新的数据库(在我们这个例子里叫 mydb),你可以使用下面的命令: $ createdb mydb 它应该生成下面这样的响应: CREATE DATABASE 如果这样,那么这一步就成功了

EntityFramework 多数据库链接,MySql,SqlServer,Oracel等

环境:EntityFramework5.0,MySql5.6,MSSQL2012 EF是强大的ORM工具,真正意义上的多数据库链接指的是不同类型的数据库,以及同种类型的数据库多个库,EF很好的支持这一点,下面简单演示下: 创建一个MVC4.0,Framework4.5的基本项目,然后重点是WebConfig配置: <?xml version="1.0" encoding="utf-8"?> <!-- For more information on

计算机改名导致数据库链接的诡异问题

前几天给开发部门部署测试数据库时,遇到一个很诡异的问题:创建一个链接服务器GEK-MIS01时,报错如下: 消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行 仍有对服务器 'GEK-MIS01' 的远程登录或链接登录. 脚本如下(略去登录名等关键信息):   因为当时是一批脚本执行而且仅有这个脚本出错,当我准备查检查出错原因的时候,又有更紧急的事情要处理,就耽搁了处理这个问题,开发那边在测试过程发现这个数据库链接有问题,邮件反馈给我,我检查时居然发现很多不可

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

SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * INTO [IMCDB].[dbo].[SysLog] FROM [AimManageDB].[dbo].[SysLog] (将数据库AimManageDB中的SysLog表复制到数据库IMCDB中) 跨服务器复制表 select * INTO [SMSDB].[dbo].[SysLog] FROM

sql server 复制表从一个数据库到另一个数据库

sql server 复制表从一个数据库到另一个数据库 /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 f