gpt4 book ai didi

Java 和数据库连接。哪种连接类别更好,为什么?

转载 作者:行者123 更新时间:2023-12-01 11:05:59 25 4
gpt4 key购买 nike

我正在使用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();}
}
}

哪一个更好,为什么?

第一个示例是否使用单例设计模式?

最佳答案

虽然我不喜欢其中任何一个,但我认为第一个比第二个要好一些。首先是一种单例,但它公开了一个公共(public)方法createCon,我认为它必须是 protected 或私有(private)的。

第二个仅在调用 main 方法后才起作用,并且只能提供一个连接。我不喜欢这样。

为什么不考虑使用连接池?

编辑

考虑到您的评论,如果您想使用单例连接管理器,我将使用类似的东西:

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() 方法就不会具有有线值。

关于Java 和数据库连接。哪种连接类别更好,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32942411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com