我现在正在学习使用MySQL,实例化和初始化Connection和Statement对象的本能如下:
public class ProjectDriver {
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
Initializer.sqlInitialize(conn,stmt);
...
}
...
}
sqlInitialize:
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();
}
...
}
以及稍后关闭Connection和Statement的sqlClose方法。
我的直觉是,在运行sqlInitialize方法后,应将ProjectDriver中的Connection和Statement对象正确初始化为它们各自的形式,但是最肯定的不是这种情况。Eclipse在IDE中有一个空指针访问警告,并且在尝试运行时抛出NullPointerException错误stmt.ExecuteUpdate(sql);
。
我很确定这是一个愚蠢的问题,但是我不知道如何使用Google(或查询StackOverflow)为什么会这样。我知道我提供的代码并不是真正做我正在做的事情的正确方法,但是我很好奇为什么会这样。我对Java中的按引用传递与按值传递的理解是,所有基元都是按值传递的,而所有对象都是按引用传递的。即使返回主类后,是否也不应该保留对另一个类中的Connection和Statement对象所做的修改?
Java“按值传递引用”。
如果在方法内分配参数,则不会影响调用方。但是,如果修改参数所指向的对象,则引用该对象的每个变量都将看到修改(如果是多线程的,则在内存模型的限制之内)。
对于处理资源,如JDBCConnection
和Statement
你一般会想使用执行周围成语。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句