public void init() throws ServletException {
//System.out.println("nina a W");
InputStream is = this.getServletContext().getResourceAsStream("WEB-INF/classes/db.config");
Properties p = new Properties();
try {
p.load(is);
DB.driver = p.getProperty("driver");
DB.url = p.getProperty("url");
DB.username = p.getProperty("username");
DB.password = p.getProperty("password");
            
System.out.println(DB.driver);
System.out.println(DB.url);
System.out.println(DB.username);
System.out.println(DB.password);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
这是我在servlet1中的配置高。。而且我在tomcat启动时。也打印了。。正确数据库连接信息。。但是我在另一个类中public class Sqlhelp {
public Connection getConnection () {
System.out.println(DB.url);
Connection conn = null;

try {
Class.forName(DB.driver);
conn = DriverManager.getConnection(DB.url,DB.username.password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;

}

public static void main(String[] args) {
System.out.println(new Sqlhelp().getConnection());
}
}
执行时老是出错。。怎么回事。。而且我在第一行打印的是null,这是为什么啊?
PS:DB中静态字段。。

解决方案 »

  1.   

    conn = DriverManager.getConnection(DB.url,DB.username.password);DB.username,DB.password??? 
      

  2.   

    给 静态字段 getter方法 调用的时候用 getter方法调用试一下。
      

  3.   

    静态url并不需要get/set方法出了什么错 为什么会打印出null 是没有初始化url还是要看代码 
      

  4.   

    conn = DriverManager.getConnection(DB.url,DB.username.password);
    是搂住贴错了还是?
      

  5.   

    private static  Connection conn = null; 数据连接给这个conn ,看看能不能解决问题.
      

  6.   


    顶~~这里应该是写错了
    至于你说的第一行打印的是null
    servlet初始化的时候确实是给DB类里面的属性赋值了
    但后面你在Sqlhelp 类里面执行main方法
    此时的DB类的属性应该是没值的。
      

  7.   

    DB.url都为null了,后面的都不用看了
      

  8.   

    为什么不能执行main方法啊?我看老师可以的啊。。还有这个conn = Driver.Manager(URL,sa,sa);
    有什么问题?我把这些全换成不用配置文件的。一切OK~!
      

  9.   

    但是我在tomcat启动时。打印确实得到了啊。。为什么静态字段的值没传过来?
      

  10.   


    是没有初始化,但是我在servlet中赋值过了。而且启动tomcat时。也确实打印出来了。。但就是没有传过来。。
      

  11.   

    init是在servlet创建的时候才被调用的,你在servlet的init方法中读取的参数,也就是说你如果想执行main方法,你就必须先访问一下servlet这样才能读连接上呀!这就是出错的原因了.
      

  12.   


    我已经先启动了tomcat了。。而且也打印出来了赋值成功。。就是在这个类中DB类的那些静态字段没传过来。。
      

  13.   

    而且我把这个servlet设为启动tomcat时就是生成了。。
      

  14.   

    搂住,看来你是对对象的栈和对象堆不理解,你是在一个类中给一个对象的静态属性赋值,但是当你不使用该类的,java的垃圾回收机制会帮你销毁对象,所以实际上你在init中赋值的那个DB,在你调用完init方法后已经被销毁了,所以你在你的Sqlhelp中,调用的DB,是另外一个对象,而在这个对象里,你又没给DB赋值,所以你调用得到的一定是NULL值
    不知道我这样说,楼主明白不?
      

  15.   

    楼主大概是单独执行的Sqlhelp这个类,它不处在上面的webapplication上下文中,访问的db和上面的servlet的db是不同的东西
      

  16.   


    恩。。启动tomcat后直接运行sqlhelp类的。。