gpt4 book ai didi

java - JDBC 的 Connection 和 Statement 对象是按引用传递还是按值传递?

转载 作者:行者123 更新时间:2023-12-01 18:28:56 24 4
gpt4 key购买 nike

我现在正在学习使用 MySQL,我实例化和初始化 Connection 和 Statement 对象的本能如下:

public class ProjectDriver {
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
Initializer.sqlInitialize(conn,stmt);
...
}
...
}

sql初始化:

public static void sqlInitialize(Connection conn, Statement stmt) {
try {
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
}
catch (SQLException se) {
se.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
...
}

以及稍后关闭连接和语句的 sqlClose 方法。

我的直觉告诉我,在运行 sqlInitialize 方法之后,ProjectDriver 中的 Connection 和 Statement 对象应该正确地初始化为其各自的形式,但事实肯定并非如此。 Eclipse 在 IDE 中出现空指针访问警告,并在尝试运行 stmt.ExecuteUpdate(sql); 时抛出 NullPointerException 错误。 .

我很确定这是一个愚蠢的问题,但我不知道如何谷歌(或查询 StackOverflow)为什么会发生这种情况。我知道我提供的代码并不是真正执行我正在做的事情的正确方法,但我很好奇为什么会发生这种情况。我对Java中的按引用传递与按值传递的理解是,所有原语都是按值传递,并且所有对象都是按引用传递。即使在返回主程序之后,对另一个类中的 Connection 和 Statement 对象所做的修改难道不应该保留吗?

最佳答案

Java“按值传递引用”。

如果您在方法中分配参数,则不会影响调用者。但是,如果您修改参数指向的对象,则引用该对象的每个变量都会看到修改(如果是多线程,则在内存模型的限制内)。

为了处理资源,例如 JDBC ConnectionStatement,您通常需要使用 Execute Around idiom .

关于java - JDBC 的 Connection 和 Statement 对象是按引用传递还是按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60193686/

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