java - 使用 apache dbcp 在 JDBC 中实现连接池

标签 java mysql jdbc apache-commons-dbcp

<分区>

这是实现池化的好代码吗?我想在我的项目中实现这个,它有 30 个线程并发运行,每个线程的每个请求都需要四个以上的连接?这段代码有效吗?

    import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;

/**
 *
 * @author
 * taher_JAVAHUNTER
 */

    public class JDBCHelper {

        private final static String username = "root";
        private final static String password = "";
        private final static String url = "jdbc:mysql://localhost:3306/treamisdemo";
        public static Connection connection = null;
        public static int connectionCount = 0;
    //    public JDBCHelper(boolean setCon) {
    //        try {
    //            setConnectionTest();
    //        } catch (Exception e) {
    //            System.out.println("Error in Connection:" + e.toString());
    //        }
    //    }
        public static BasicDataSource dataSource;

        public static Connection getConnection() throws SQLException {
            try {
                if (dataSource == null) {
                    dataSource = new BasicDataSource();
                    String driver = "com.mysql.jdbc.Driver";
                    try {
                        dataSource.setDriverClassName(driver);
                        dataSource.setUrl(url);
                        dataSource.setUsername(username);
                        dataSource.setPassword(password);
                        dataSource.setMaxActive(100);
                        dataSource.setMaxWait(10000);
                        dataSource.setMaxIdle(10);
                        if (connection == null || connection.isClosed()) {
                            System.out.println(" requeition CONNECTION WITH FIRST SERVER.");
                            connection = dataSource.getConnection();
                            connectionCount++;
                        }
                    } catch (SQLException e) {
                        System.out.println("***Connection Requisition*** Could not connect to the database msg :" + e.getMessage());
                    }
                } else {
                    connection = dataSource.getConnection();
                    connectionCount++;
                }
            } catch (Exception e) {
                System.out.println("open connection exception" + e);
            }
            return connection;
        }

        public static void close(ResultSet c) {
            try {
                if (c != null) {
                    c.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        public static void close(Statement c) {
            try {
                if (c != null) {
                    c.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        public static void close(Connection c) {
            try {
                if (c != null) {
                    c.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

}

最佳答案

推荐这种方法。您基本上是在创建连接并卡在上面。我不喜欢你的模式,但这样的模式会更好:

public class DataTransaction {
   private final static BasicDataSource dataSource;

   static {
      dataSource = new BasicDataSource();
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/registrationtest");
      dataSource.setUsername("root");
      dataSource.setPassword("root");
      dataSource.setMaxActive(100);
      dataSource.setMaxWait(10000);
      dataSource.setMaxIdle(10);
   }

   private DataTransaction() {
   }

   public static DataSource getDataSource() {
      return dataSource;
   }
}

此外,我不会对任何数据源参数进行硬编码,而是从属性文件中初始化数据源。

关于java - 使用 apache dbcp 在 JDBC 中实现连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20016046/

相关文章:

java - 关于扩展 ListActivity 的问题

java - 使用java合并两个ms access数据库

java - 为什么 Redis 不在 __keyevent@*__ :expired topic events? 上调用我的 MessageListener

java - 设置最小 Java 堆大小的原因是什么?

mysql - 尝试合并表时出现 Access 错误

mysql - 如何获得外键的ON DELETE和ON UPDATE操作值?

java - jdbc odbc 与 MS access 的连接字符串

java - 使用 SQL Server 数据库在数据库中插入多行

java - Topmost View 吞下触摸事件,因为重叠

sql - mysql order_by 问题