Java-এ MySQL কানেকশন পুনরায় ব্যবহার করতে Singleton Design Pattern বাস্তবায়ন করা হয়। এটি নিশ্চিত করে যে পুরো অ্যাপ্লিকেশনে শুধু একটি Connection অবজেক্ট থাকে।
ConnectDatabase.java (Singleton Class)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectDatabase {
private static Connection conn = null;
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASS = "123456";
private ConnectDatabase() {} // Private constructor
public static Connection getConnection() {
if (conn != null) {
try {
if (!conn.isClosed() && conn.isValid(2)) return conn;
} catch (SQLException e) {
conn = null; // Reset if invalid
}
}
return createConnection();
}
private static Connection createConnection() {
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 8.0+ driver
conn = DriverManager.getConnection(URL, USER, PASS);
return conn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
CallConnection.java (ব্যবহার)
import java.sql.Connection;
public class CallConnection {
public static void main(String[] args) {
Connection con = ConnectDatabase.getConnection();
if (con != null) {
System.out.println("Connection successful !!!");
} else {
System.out.println("Connection failed!");
}
}
}
আউটপুট
Connection successful !!!
বेहতর পρακτিস (Connection Pooling)
প্রোডাকশন এনভায়রনমেন্টে সিঙ্গলটনের পরিবর্তে HikariCP, DBCP2, বা Tomcat JDBC Pool এর মতো কানেকশন পুল ব্যবহার করুন।
HikariCP উদাহরণ (Maven dependency)
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DatabasePool {
private static HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("123456");
config.setMaximumPoolSize(10);
dataSource = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}