gpt4 book ai didi

java - 每次插入数据库时​​都必须获取连接并关闭连接吗?

转载 作者:行者123 更新时间:2023-11-30 05:40:35 27 4
gpt4 key购买 nike

我只是想知道在我的java应用程序中,每次我想插入数据库时​​是否真的有必要调用getConnection/closeConnection,或者我可以在应用程序开始时验证用户/通行证并且从不调用再次连接?

//Conn class
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String USER = "hr";
private static final String PASS = "hr";

//Connect
public static Connection getConnection(){
try {
Class.forName(DRIVER);
return DriverManager.getConnection(URL, USER, PASS);
} catch (ClassNotFoundException | SQLException ex) {
throw new RuntimeException("Error: RuntimeException",ex);
}
}

//Close
public static void closeConnection(Connection con){
try {
if(con!=null){
con.close();
}
} catch (SQLException ex) {
Logger.getLogger(ConnectionAcademia.class.getName()).log(Level.SEVERE, null, ex);
}
}

//DAO Class
//Insert product
public void createProduct(Product p){

Connection con = ConnectionGym.getConnection();
PreparedStatement stmt = null;

try {

stmt = con.prepareStatement("INSERT INTO tb_product(key_product, name, price, status) "
+ "VALUES(?,?,?,?)");
stmt.setInt(1, p.getKey_Product());
stmt.setString(2, p.getName());
stmt.setDouble(4, p.getPrice());
stmt.setBoolean(6, p.getStatus());

stmt.executeUpdate();

JOptionPane.showMessageDialog(null, "Success!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex);
} finally{
ConnectionAcademia.closeConnection(con, stmt);
}
}

最佳答案

你当然不想这样做。与执行语句所需的时间相比,创建连接和关闭连接的开销是巨大的。您还将失去准备语句的好处,因为准备好的语句链接到数据库连接以供以后重用。

如果您不在多线程环境(例如 Web 应用程序)中工作,那么使用单个连接是完全合理的,请在应用启动时创建连接,然后在应用完成后关闭。

如果您需要并发访问,那么您应该考虑配置连接池,以防止阻塞 IO。

正如上面评论中提到的,如果您打算在应用程序中进行大量数据库更新,您应该考虑使用 ORM 例如 Hibernate,它从长远来看,这会让您的生活更轻松。

关于java - 每次插入数据库时​​都必须获取连接并关闭连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735031/

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