我正在使用java和一些数据库(oracle/sql
)来存储一些信息。所以我决定创建一个 fixed 类来处理我的连接,最后我会返回一个 con 对象,这样我就可以在另一个类中使用它了。
我有这个类的主要功能是能够从另一个类建立到数据库的连接。
请告诉我哪一个更好,为什么以及是否可以改进。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectDB {
private static ConnectDB con = new ConnectDB();
private ConnectDB() {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection createCon() {
Connection connection = null;
try{
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","yy","yy");
} catch (SQLException e) {
System.out.println("Connection to db could not be done");
}
return connection;
}
public static Connection getConexiune() {
return con.createCon();
}
}
或者我可以使用这个类
import java.sql.*;
public class ConectDB {
static Connection con;
public static Connection getConexiune() {
return con;
}
public static void main(String arg[]){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","yy","yy");
System.out.println("cONNECTED");
con.close();
}catch(Exception ex){ex.printStackTrace();}
}
}
哪一个更好,为什么?
第一个例子是否使用Singleton设计模式?
答案 0 :(得分:1)
虽然我不喜欢他们,但我认为首先不如第二次。首先是一种Singleton,但它暴露了一个公共方法createCon
,我认为它必须受到保护或私有。
第二个只在调用main方法后才能工作,它只能提供一个连接。我不喜欢它。
为什么不考虑使用连接池?
考虑到您的评论,如果您想使用Singleton连接管理器,我会使用类似的东西:
public class ConnectDB {
private static ConnectDB instance = null;
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch (ClassNotFoundException e) {
//TODO manage exception
e.printStackTrace();
}
}
public static ConnectDB getInstance(){
if(null == instance)
instance = new ConnectDB();
return instance;
}
public Connection getConnection() {
Connection connection = null;
try{
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","yy","yy");
}catch(SQLException e){
//TODO manage exception
e.printStackTrace();
}
return connection;
}
}
当然,我将为:创建参数(用getter / setter 封装):
这样,您的getConnection()
方法就不会有有线值。
答案 1 :(得分:0)
每个应用程序的一个连接不是一个好主意。
拥有固定的连接池并管理池。在释放连接时,不是关闭连接,而是返回池
您可以编写自己的连接池或实现Oracle UCP池。请查看UCP documentation
物理关闭不良连接所需的内务处理机制(超时连接或断开连接)