gpt4 book ai didi

java - JDBC Connection对象在静态 block 执行后自动关闭以及如何模块化代码

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:44 25 4
gpt4 key购买 nike

我有一个类正在调用数据库类以将条目添加到数据库中。问题是每当我向数据库添加一个元组时,我都必须创建一个新的连接和一个语句对象。

我想解决这个问题的一个技巧是将 Connection 和 Statement 对象的初始化放在一个静态 block 中。并直接运行命令statement.executeUpdate(sqlStatement)。

但是这样会报错,Connection对象没有初始化。

代码如下:

class Database{
static final String JDBC_DRIVER = "....";
static final String DB_URL = "...";

static final String USER = ".....";
static final String PASS = ".....";
static Connection conn = null; // Connection object for creating a connection with the Database
static Statement stmt = null; // Statement object to run queries on first table in Database

static{
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
stmt = conn.createStatement();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){ //Handle errors for Class.forName
e.printStackTrace();
}finally{ //finally block used to close resources
try{
if(stmt!=null){
stmt.close();
}
}catch(SQLException se2){
System.out.println("caught a SQLException " + se2 + " AND NOTHING CAN BE DONE ABOUT IT");
// nothing we can do
}
try{
if(conn!=null){
conn.close();
}
}catch(SQLException se){
se.printStackTrace();
}
}
}

public static void runSqlCommand(String command)throws java.lang.Exception{
stmt.executeUpdate(command); // This gives an error that connection is not initialized.
}

}

我想知道如何模块化代码,这样我就可以调用一个 runSqlCommand 函数并执行 sql 代码,而不必每次都创建连接和语句。

另外请告诉我,如果我只初始化对象一次而不是对每个 sql 命令都初始化,性能应该提高多少。

最佳答案

您在静态初始化程序 block 中打开连接,并在该 block 的末尾关闭它,因此无论何时加载您的类,您总是会初始化连接然后关闭,我认为您需要移动输出您在 finally block 中编写的代码。

关于java - JDBC Connection对象在静态 block 执行后自动关闭以及如何模块化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24329331/

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