一个web应用,其中有servlet,也有供JSP调用的类。
我现在的做法是在servlet的Init里面进行数据库的连接,
在类的构造函数里面进行数据库的连接,
各位讨论下是否合适?
还是应该在相应的方法里面进行数据库的连接?
刚学Java,请各位讨论指点。

解决方案 »

  1.   

    初始化的时候连接数据库其实不是很好...
    有很多原因的,因为初始化的时候肯定还要做其他的事情,如果你去初始化连接数据库(比较花时间),但是到后来却没能真正的初始化……我觉得应该用显式的api来连接数据库。
      

  2.   

    fengzhongli:
    “用显式的api来连接数据库。”
    此话怎讲?
      

  3.   

    就是写一个连接数据库的java类,包含创建connection的方法,查询数据的方法,
    和更新数据的方法public  class Connecion(){
       try{
        class.forName(drivername);
      }catch(Execption e){
      } 
        public Connection getConnection(){
               drivermanager.getConneciont(url,user,password);
      }
    }
      

  4.   

    连接数据库建议不要写在jsp中,jsp是用来显示的,也不要写在servlet中,servlet用来处理业务的,最好是自己写一个javabean进行数据库连接。当然这只是建议。
      

  5.   

    我觉得这就是看你对java的机制了解程度了。一般来说这种区别是不大的。
    首先在jsp里面写数据库连接,这是绝对不可以的,因为一个很简单的理由,jsp是用来做显示的,而且jsp的访问量极大,如果在jsp中构造连接大大影响性能。
    在servlet中构造连接,说实在的,这种方式和在jsp中构造区别不打,因为jsp也是servlet。当然servlet可以在构造函数和init方法内执行数据库链接,这样一来构造数据库连接确实数量大大减小了,但是你有没有想过当你close掉数据库链接以后,你不得不再写一个方法再来构造链接,一个很简单原因,当第一访问servlet的时候构造器执行,init方法执行,第二次以后访问它们几乎很少再去执行构造方法和init了,可能会报数据库已关闭异常,servlet在数据库中几乎是单例的。
    在就是写javabean来连接数据库,当然这也有两种方法,一种是写在构造函数中,构造函数中,当new出这个对象的时候就连接数据库了,你只要直接操作,直到close,当然你下次再要操作时也不得不从新new这个对象,这样也会造成new出对象很多的毛病,java虚拟机不一定会很快的处理掉这些内存。还有就是写一个相当于单例的类,然后连接数据库在某个方法中建立,例如这个方法叫getConnection,当然这样避免了new出很多对象来,但是单一对象的操作性能并不是很好,而且在方法中实现连接数据库也会造成数据库连接次数过多的问题。
      

  6.   

    多谢spiniper的精彩发言,
    为什么我们不采用一个数据库连接池的东西?
    系统一上来就启动连接池,
    应用中需要数据库就从连接池中取一个连接来用。
    不好意思,
    Java不太懂,以前是搞UNIX+C+Informix的。
      

  7.   

    servlet的Init里面进行数据库的连接
    这个是决定不可以的
    servlet在Web服务器启动的时候就会Init,也就是说,你有多少个servlet就会在开机的时候就会建立多少数据库连接
    另外一点,你的init之后是如何进行手工释放的呢
    所以 不能在servlet的Init里面进行数据库的连接
      

  8.   

    明白了,
    看来在servlet的init()里面连接数据库被排除了。
      

  9.   

    Init 可以拿到数据源DataSource,但不要拿到Connection如果你放非得在servlet里面操作数据库的话!
      

  10.   

    楼主
    连接池,可能解决比较完美,但是,问题在于,过于复杂,一般都应用在较大规模的项目里面。可是,spiniper朋友说的,都是比较简单,容易实现,更加有利于个人的,倾向于小型项目的实现方法。连接池以外的,我更倾向于,使用函数方法来创建数据库连接。数据库连接方面,就JAVA方面来看,重点在 重复利用的效率,以及安全性,做好这两点,应付一般系统应该没有问题。
    性能在小型系统中意义不大。