以下代码在变量上产生了错误,con2说 "non-static variable con2 cannot be referenced from a static context Error."我用Google搜索解决方案,并且他们暗示尚未初始化该变量以使方法可用。我初始化不正确吗?我也尝试过将事情改为公开,但这也无济于事。
"non-static variable con2 cannot be referenced from a static context Error."
import java.io.*; import java.net.*; import java.sql.*; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.PreparedStatement; import net.sourceforge.jtds.jdbcx.JtdsDataSource; import net.sourceforge.jtds.jdbc.Driver; class testconnect { private java.sql.Connection con2 = null; private final String url2 = "jdbc:jtds:sqlserver://"; private final String serverName= "SQL01"; private final String portNumber = "2677"; private final String databaseName= "App"; private final String userName = "bob"; private final String password = "boob"; private final String selectMethod = "cursor"; private String getConnectionUrl2(){ System.out.println("initalizing jtds"); //String returnVal = url+serverName+":"+portNumber+";databaseName="+databaseName+";user="+userName+";password="+password+";instance="+instance+";"; String returnVal = url2+serverName+":"+portNumber+"/"+databaseName+";user="+userName+";password="+password; System.out.println("url2: " + returnVal); return returnVal; } public static void main (String[] args) { con2 = java.sql.DriverManager.getConnection(getConnectionUrl2()); } } //end class
不,实际上,你必须声明con2字段为静态:
private static java.sql.Connection con2 = null;
编辑:更正,实际上是远远不够的,你将遇到相同的问题,因为getConnection2Url方法也不是静态的。更好的解决方案可能是改为进行以下更改:
public static void main (String[] args) { new testconnect().run(); } public void run() { con2 = java.sql.DriverManager.getConnection(getConnectionUrl2()); }
你可能想在con2的声明中添加“ static”。
在Java中,事物(变量和方法)都可以是类的属性(这意味着它们被该类型的所有对象共享),也可以是对象的属性(同一类的每个对象中的对象都不相同) )。关键字“静态”用于指示某物是类的属性。
“静态”东西一直存在。其他东西只有在创建对象后才存在,即使每个单独的对象都有它自己的东西副本。在这种情况下,它的另一面很关键:静态内容无法访问非静态内容,因为它不知道要查找的对象。如果将其传递给对象引用,它可以完成类似“ thingie”的任务.con2”,但不允许简单地说“ con2”,因为你尚未说出哪个对象的con2是什么意思。