首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接关闭错误- MySQL、JDBC和Hikaricp

连接关闭错误- MySQL、JDBC和Hikaricp
EN

Stack Overflow用户
提问于 2020-11-04 22:36:08
回答 2查看 731关注 0票数 1

使用Hikari连接池实现了DAO模式,充分利用了DAO设计模式。创建了单例类,如果单例类的对象为NULL>对象,则返回具有公共连接的类的对象,从而使连接查询调用单例类的静态方法来获得公共连接,并在try- with资源中关闭准备好的语句。应用程序处于活动状态超过12小时后,很少的请求查询未被执行“连接已关闭”。

代码语言:javascript
运行
复制
public class DatabaseConnection {

//Constants 

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

private static HikariDataSource dataSource;

public Connection conn;
public static DatabaseConnection db;
/**
 * 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 DatabaseConnection() throws SQLException,CasbnExceptions {
    
    try {
        
        //create the object of HikariDataSource
        dataSource=new HikariDataSource();
        
        //set up the JDBC details (username,password,url,driver)
        System.out.println("Inside DatabaseConnection constructor..");
        
        dataSource.setDriverClassName(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        
        this.conn=dataSource.getConnection();
        
        
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

}

public static  DatabaseConnection getCon() throws CasbnExceptions, SQLException
{
    if(db==null)
    {
        System.out.println("Inside getCon() and if block...");
        db=new DatabaseConnection();
    }
    
    
    return db;
}
}


 public class DAO_Implementation implements DAOFactory {


//Declare all the SQL queries as private static and final 

//getCompany query 
private static final String getCompanyName="SELECT company_name FROM #.company_register where email=?";


@Override
public String getCompanyName(String Email) throws SQLException {

    try
    (PreparedStatement pst = DatabaseConnection.getCon().conn
            .prepareStatement(getCompanyName)){

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

   }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return Name;
}
@Override
public Pojos Individual_Company_detail(String CompanyName) throws SQLException{

    try
    (PreparedStatement pst = DatabaseConnection.getCon().conn
            .prepareStatement(CompanyDetail);){
    pst.setString(1, CompanyName);
  
    ResultSet rs = pst.executeQuery();

    if(rs.next()==true)
    {
    Pojos Po=new Pojos();
    
    Po.setCompanyID(rs.getInt(1));
    Po.setUserCount(rs.getInt(2));
    Po.setPlan(rs.getString(3));
    Po.setDateofSub(rs.getString(4));
    Po.setSubscriptionID(rs.getString(5));
    Po.setVaildTill(rs.getString(6));
    
    
    
    return Po;
    
    }

    else
    {
        Pojos Po=new Pojos();
        Po.setErrorMessage(CompanyName +" Has not registered to of our Plan and no Recent Transactions");
       
        
        
        return Po;
        
    }
    
    
    }  

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-04 22:44:27

当前,您一直使用.conn返回相同的连接

DatabaseConnection中删除conn,并添加一个不同的方法,该方法每次都会从Hikari数据源中getConnection

这样,Hikari将处理连接池

代码语言:javascript
运行
复制
public static Connection getConnection() {
   return dataSource.getConnection();
}

并单独打开连接资源,将其关闭:

代码语言:javascript
运行
复制
 try 
(Connection conn = DatabaseConnection.getConnection();
    PreparedStatement pst = conn.prepareStatement(CompanyDetail))
票数 1
EN

Stack Overflow用户

发布于 2020-11-05 13:57:39

代码语言:javascript
运行
复制
public class DatabaseConnection {
String url = "jdbc:mysql://localhost:3306/";
//String dbName = ""
String driver="com.mysql.jdbc.Driver";
String userName = "root";
String password = "";

private static HikariDataSource dataSource;

public static DatabaseConnection db;

public DatabaseConnection() throws SQLException,CasbnExceptions {
    
    try {
        
        //create the object of HikariDataSource
        dataSource=new HikariDataSource();
        
        //set up the JDBC details (username,password,url,driver)
        System.out.println("Inside DatabaseConnection constructor..");
        
        dataSource.setDriverClassName(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        
    
        
        
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

}

public static Connection getConnection() throws SQLException
{
    if(db==null)
    {
        db=new DatabaseConnection();
    }
    return dataSource.getConnection();
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64682098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档