JDBC 的 Connection 和 Statement 对象是按引用传递还是按值传递?
Are JDBC's Connection and Statement objects pass-by-reference or pass-by-value?
我正在学习使用 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 方法。
我的直觉告诉我们,ProjectDriver 中的 Connection 和 Statement 对象应该在 sqlInitialize 方法 运行 之后正确初始化为它们各自的形式,但事实并非如此。 Eclipse 在 IDE 中有空指针访问警告,并且在尝试 运行 stmt.ExecuteUpdate(sql);
.
时抛出 NullPointerException 错误
我很确定这是一个愚蠢的问题,但我不知道如何 Google(或查询 Whosebug)为什么会这样。我知道我提供的代码并不是做我正在做的事情的正确方法,但我很好奇为什么会这样。我对 Java 中的按引用传递与按值传递的理解是,所有基元都是按值传递的,并且所有对象都是按引用传递的。在另一个 class 中对 Connection 和 Statement 对象所做的修改是否应该保留,即使在返回到 main 之后?
Java"passes references by value"。
如果您在方法中分配参数,则不会影响调用者。但是,如果您修改参数指向的对象,那么引用该对象的每个变量都会看到修改(如果是多线程,则在内存模型的限制内)。
为了处理资源,例如 JDBC Connection
和 Statement
,您通常需要使用 Execute Around idiom.
Java 编程语言不支持按引用传递。 JDBC 是基于 Java 的 API。
我正在学习使用 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 方法。
我的直觉告诉我们,ProjectDriver 中的 Connection 和 Statement 对象应该在 sqlInitialize 方法 运行 之后正确初始化为它们各自的形式,但事实并非如此。 Eclipse 在 IDE 中有空指针访问警告,并且在尝试 运行 stmt.ExecuteUpdate(sql);
.
我很确定这是一个愚蠢的问题,但我不知道如何 Google(或查询 Whosebug)为什么会这样。我知道我提供的代码并不是做我正在做的事情的正确方法,但我很好奇为什么会这样。我对 Java 中的按引用传递与按值传递的理解是,所有基元都是按值传递的,并且所有对象都是按引用传递的。在另一个 class 中对 Connection 和 Statement 对象所做的修改是否应该保留,即使在返回到 main 之后?
Java"passes references by value"。
如果您在方法中分配参数,则不会影响调用者。但是,如果您修改参数指向的对象,那么引用该对象的每个变量都会看到修改(如果是多线程,则在内存模型的限制内)。
为了处理资源,例如 JDBC Connection
和 Statement
,您通常需要使用 Execute Around idiom.
Java 编程语言不支持按引用传递。 JDBC 是基于 Java 的 API。