java.sql.Driver是一个接口,它表示的是连接数据库的一个驱动程序类。每种数据库都有它自己的Driver类来实现与数据库服务器连接如Oracle:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@svr:DB");
其实在JDBC的规范中要求每个实现了Driver接口的类(上述为OracleDriver)在静态方法中需要向
DriverManager注册自己
DriverManager.registerDriver(new OracleDriver());这样在DriverManager.getConnection,DriverManager会遍历已经注册的所有类,来确定使用哪个Driver来完成连接工作

解决方案 »

  1.   

    Class.forName(驱动名称);   
    //String url="jdbc:microsoft:sqlserver://192.168.0.1:1433;DatabaseName=test"; 
    //test你的数据库的 
    //String user="sa"; 
    //String password=""; 
    Connection conn= DriverManager.getConnection(url,user,password);   
    Statement stmt=conn.createStatement();    
    ResultSet rs=stmt.executeQuery(sql);   
    一般连数据库的规律 
    实在急联系我联系方式发到你的短信里了
      

  2.   


    DriverManager的应用我会
    那么Driver如何应用?谢谢
      

  3.   

    大哥那只是个接口啊用class.forname装载驱动就可以了 还怎么应用请指教
      

  4.   

    是这样的,DriverManager.getConnection()此方法为同步方法,支持多线程并行,所以经常造成weblogic的jvm死锁。现在手头没有类库的书籍,所以想偷个懒,直接告诉我吧:我不想用DriverManager来进行数据库连接,用其他的方法
      

  5.   

    DriverManager.getConnection()此方法为同步方法,但是不可能造成死锁。而且最大的问题是在并发的时候,连接应该是从连接池中获得的而绝非DriverManager.getConnection()!!!!!!!!!!
    所以造成死锁的是你的代码问题!!!!!
      

  6.   

    经过线程的追踪:
    "ExecuteThread: '0' for queue: 'default'" daemon prio=5 tid=0x89f8290 nid=0xb34 waiting fo
    r monitor entry [0x96ef000..0x96efdb8]
            at com.inet.tds.a.executeQuery(Unknown Source)
            at com.huiton.pub.dbx.PageQuery.getData(PageQuery.java:59)
            at com.huiton.cerp.inv.inv7201View.processRequest(inv7201View.java:256)
            at com.huiton.mainframe.control.web.RequestProcessor.processRequest(RequestProcess
    or.java:90)
            at com.huiton.mainframe.control.web.MainServlet.doProcess(MainServlet.java:189)
            at com.huiton.mainframe.control.web.MainServlet.doGet(MainServlet.java:142)
            at com.huiton.mainframe.control.web.MainServlet.doPost(MainServlet.java:73)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:26
    3)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:20
    0)
            at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletConte
    xt.java:2390)
            at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:19
    59)
            at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
            at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)表示:最后调用的方法是 at com.inet.tds.a.executeQuery(Unknown Source)
    其中的executeQuery方法又调用的有关DriverManager连接数据库的方法,这样能说没有它的原因么?
      

  7.   

    当然和DriverManager根本没有任何关系!executeQuery是不会调用DriverManager的方法的!DriverManager只在你获取连接的时候使用,而并非任何时候都需要!
    你最后的错误可能是由于JTA超时,数据库返回错误等原因,而非DriverManager的问题。
      

  8.   

    to:chdw
    executeQuery确实调用了DriverManager方法,另外,如果正如你说只在获取连接的时候使用,那么如果同时在线人数增多 ,并行处理量加大,造成死锁的最大因素不就有可能是它。总之,我还是想用其他的方法应用数据库的连接,而非它
      

  9.   

    我不清楚你使用的是什么数据库连接,一般的数据库连接中executeQuery是绝对不会调用DriverManager的方法的!!DriverManager的主要用处就是获得Connection对象,这样以后就不再需要这个了。DriverManager的确是同步的,但是同步是不会造成死锁的(除非你会请求两个或以上的同步锁),在一般的程序中,连接应该是从连接池中获得连接而不是每次从DriverManager获得你根本不应该自己企图写一个连接方法,无数的应用都是使用DriverManager来获得连接(即使使用连接池,创建新连接都仍然是从DriverManager中完成的)而没有问题,所以你应该认为是你自己的代码或者配置有问题!我没有看清楚你的异常中的详细信息,我估计有可能是你的执行时间太长了,被WebLogic认为JTA超时而回滚了(这个可以在WebLogic的Console上配置的)
      

  10.   

    实际的情况是造成了weblogic的down机,而jta并没有回滚
      

  11.   

    down机是很多原因的,可能是内存不够,并发太多了之类的。没有一个详细的错误日志是很难判断真正原因,但是很肯定的是绝对不应该是DriverManager的问题!
      

  12.   

    你的错误信息我始终没有看完全,所以不能下定论,但是难道你认为你自己写的程序能够比得上Java本身的源代码?