如何使用hikaricp-java在整个web应用程序中实现单个数据库连接

如何使用hikaricp-java在整个web应用程序中实现单个数据库连接,java,jdbc,jakarta-ee,connection-pooling,hikaricp,Java,Jdbc,Jakarta Ee,Connection Pooling,Hikaricp,情景: •设计了一个数据访问对象(DAO),以根据项目要求执行JDBC操作 •实施Hikaricp库以处理数据源并实现连接池 •Hikaricp库在一个单例类(DatabaseConnection.java)中实现,该类使用MySQL凭据设置数据源并返回数据源 •DAOFactory接口具有执行SQL操作的抽象方法 •DAO_实现类实现DAOFactory,每个方法从(databaseconnection.java)类访问datasource.getconnection •连接和准备好的语句在T

情景:

•设计了一个数据访问对象(DAO),以根据项目要求执行JDBC操作

•实施Hikaricp库以处理数据源并实现连接池

•Hikaricp库在一个单例类(DatabaseConnection.java)中实现,该类使用MySQL凭据设置数据源并返回数据源

•DAOFactory接口具有执行SQL操作的抽象方法

•DAO_实现类实现DAOFactory,每个方法从(databaseconnection.java)类访问datasource.getconnection

•连接和准备好的语句在Try with块中关闭,我没有在任何地方关闭连接以维护池

•每个查询从DatabaseConnection.java类访问数据源并获取连接。这会导致与MySQL服务器相关的错误–连接太多

如何使用Hikaricp或通过任何方式在整个应用程序中实现单一连接

我已附上我的代码。请调查一下

请让我知道哪里出了问题,应该改进什么

公共类数据库连接{
' //常数

private static final String url = "jdbc:mysql://localhost:3306/";
private static final String dbName = "#";
private static final String driver="com.mysql.jdbc.Driver";
private static final String userName = "root";
private static final String password = "#";

//http://zetcode.com/articles/hikaricp/

private static HikariDataSource dataSource;

/**
 * A static method which uses HikariDataSource Connection Pooling library to connect with the MySQL Database. 
 * Accepts and Sets few JDBC details like User Name,Password,URL,Driver Name and many more.
 * @return This methods returns HikariDataSource 
 * @throws SQLException and CasbnException
 */

public static HikariDataSource getDataSource() throws SQLException,CasbnExceptions {
    
    try {
        
        //create the object of HikariDataSource
        dataSource=new HikariDataSource();
        
        //set up the JDBC details (username,password,url,driver)
        
        dataSource.setDriverClassName(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        
        
        
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return dataSource;
}
public static void CloseConnection()
{
    dataSource.close();
}
}

公共接口工厂{

//Login
public Object Login(String email,String pass) throws SQLException;

//To Fetch Company Name After Logging In
public String getCompanyName(String Email) throws SQLException;

//Individual Company Details 
public Pojos Individual_Company_detail(String CompanyName) throws SQLException;

//To Users of that Company 
public ArrayList<Pojos> getUserDetails(int id) throws SQLException;

//Team Channels 
public ArrayList<Pojos> GetTeamChannels(int id) throws SQLException;

//Call Details of the respective Company 
public ArrayList<Pojos> GetCallDetails(String UserName,int id) throws SQLException;

// Get Info for Editing a User 
public Pojos GetUserById(int id) throws SQLException;

//Update the user
public boolean UpdateUser(Pojos po) throws SQLException;

//Delete the User
public boolean DeleteUser(int id) throws SQLException;
//登录
公共对象登录(字符串电子邮件、字符串传递)抛出SQLException;
//登录后获取公司名称的步骤
公共字符串getCompanyName(字符串电子邮件)抛出SQLException;
//个别公司详情
公共POJO个人\公司\详细信息(字符串CompanyName)抛出SQLException;
//给那家公司的用户
公共ArrayList getUserDetails(int-id)抛出SQLException;
//团队频道
公共ArrayList GetTeamChannels(int-id)抛出SQLException;
//有关公司的电话详情
公共ArrayList GetCallDetails(字符串用户名,int-id)抛出SQLException;
//获取用于编辑用户的信息
公共POJO GetUserById(int id)抛出SQLException;
//更新用户
公共布尔更新器(Pojos po)抛出SQLException;
//删除用户
公共布尔DeleteUser(int-id)抛出SQLException;
}

公共类DAO_实现实现了DAO工厂{

//Login
public Object Login(String email,String pass) throws SQLException;

//To Fetch Company Name After Logging In
public String getCompanyName(String Email) throws SQLException;

//Individual Company Details 
public Pojos Individual_Company_detail(String CompanyName) throws SQLException;

//To Users of that Company 
public ArrayList<Pojos> getUserDetails(int id) throws SQLException;

//Team Channels 
public ArrayList<Pojos> GetTeamChannels(int id) throws SQLException;

//Call Details of the respective Company 
public ArrayList<Pojos> GetCallDetails(String UserName,int id) throws SQLException;

// Get Info for Editing a User 
public Pojos GetUserById(int id) throws SQLException;

//Update the user
public boolean UpdateUser(Pojos po) throws SQLException;

//Delete the User
public boolean DeleteUser(int id) throws SQLException;
//将所有SQL查询声明为私有静态和最终查询

String Login="Query";
String getCompanyName="Query";
//------------------------------------------------------

//Constants

private String name;

private POJOs Po;

private ArrayList<Pojos> ar;


// Override Methods

@Override
public Object Login(String email, String pass) throws SQLException {

    System.out.println("Inside Login Method..");
    // Put Connection code inside 'try' which automatically closes the connection.
    try
    (Connection con=DatabaseConnection.getDataSource().getConnection();
    
     PreparedStatement pst = con
             .prepareStatement(Login);){
     pst.setString(1, email);
     pst.setString(2, pass);

     ResultSet rs = pst.executeQuery();
     
     if(rs.next())
     {
      System.out.println(rs.getString(1));
        Po=new Pojos(rs.getString("email"), rs.getString("password"));
         
     }
    }
    catch(Exception e) {
        e.printStackTrace();
    }
     return Po;
    
}

@Override
public String getCompanyName(String Email) throws SQLException {
    // TODO Auto-generated method stub
    try
    (Connection con=DatabaseConnection.getDataSource().getConnection();
    
    PreparedStatement pst = con
            .prepareStatement(getCompanyName)){

   pst.setString(1, Email);
    ResultSet rs = pst.executeQuery();
    
    
    rs.next();
    
    Name=rs.getString(1);
    

   }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return Name;
}
String Login=“Query”;
字符串getCompanyName=“Query”;
//------------------------------------------------------
//常数
私有字符串名称;
私人波荷波;;
私人ArrayList ar;
//重写方法
@凌驾
公共对象登录(字符串电子邮件、字符串传递)引发SQLException{
System.out.println(“内部登录方法”);
//将连接代码放在“try”内,它会自动关闭连接。
尝试
(Connection con=DatabaseConnection.getDataSource().getConnection();
准备好的报表pst=con
.prepareStatement(登录);){
pst.setString(1,电子邮件);
pst固定管柱(2,通过);
ResultSet rs=pst.executeQuery();
如果(rs.next())
{
System.out.println(rs.getString(1));
Po=新POJO(rs.getString(“电子邮件”)、rs.getString(“密码”);
}
}
捕获(例外e){
e、 printStackTrace();
}
退回采购订单;
}
@凌驾
公共字符串getCompanyName(字符串电子邮件)引发SQLException{
//TODO自动生成的方法存根
尝试
(Connection con=DatabaseConnection.getDataSource().getConnection();
准备好的报表pst=con
.prepareStatement(getCompanyName)){
pst.setString(1,电子邮件);
ResultSet rs=pst.executeQuery();
rs.next();
Name=rs.getString(1);
}
捕获(例外e)
{
e、 printStackTrace();
}
返回名称;
}

google hikariconfig maximumPoolSize