static方法数据的值被方法所在类的所有对象共享吗?

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:53:28
public class ConnDB {

public static Connection getConnection(){
Connection conn=null;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=test;user=test;password=test");
}catch(Exception e){
e.printStackTrace();
}
return conn;
}

}
这是一个连接数据库的类,当多次用ConnDB.getConnection()连接数据库时,是用的同一个connection吗?这样影响连接效率吗?如果用数据库连接池会有改善吗?public class ConnDB {

public static Connection getConnection(){
Connection conn=null;
try{
Context ctx = new InitialContext();
Context envctx = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envctx.lookup("jdbc/sql");
conn=ds.getConnection();

}catch(Exception e){
e.printStackTrace();
}
return conn;
}

.DriverManager.getConnection会返回一个新的Connection,所以每次调用 getConnection()方法都会建立一个新的连接,所以用的不是同一个Connection
.这样当然会影响效率
.使用连接池,(DataSource) envctx.lookup("jdbc/sql")会从池里找出一个已存在的数据源,如果找到则直接利用这个数据源,返回连接,如果找不到就会重新建一个,这样连接就会被重用,效率上会改善很多。

不会
因为你调用一次方法执行一次方法体里的内容.这点上跟静态没关系
你可以把连接属性设置成静态的.在方法里面判断下该静态属性是否已连接(不知道方法的话去API查)然后根据是否连接来判断是否加载驱动什么什么的
如果都已经连接的话直接执行语句就好了