如何使用hikaricp-java在整个web应用程序中实现单个数据库连接
情景: •设计了一个数据访问对象(DAO),以根据项目要求执行JDBC操作 •实施Hikaricp库以处理数据源并实现连接池 •Hikaricp库在一个单例类(DatabaseConnection.java)中实现,该类使用MySQL凭据设置数据源并返回数据源 •DAOFactory接口具有执行SQL操作的抽象方法 •DAO_实现类实现DAOFactory,每个方法从(databaseconnection.java)类访问datasource.getconnection •连接和准备好的语句在Try with块中关闭,我没有在任何地方关闭连接以维护池 •每个查询从DatabaseConnection.java类访问数据源并获取连接。这会导致与MySQL服务器相关的错误–连接太多 如何使用Hikaricp或通过任何方式在整个应用程序中实现单一连接 我已附上我的代码。请调查一下 请让我知道哪里出了问题,应该改进什么 公共类数据库连接{如何使用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
' //常数
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