2011-03-23 81 views
0

我用一個屬性文件包含一個EJB一個SQLServer連接字符串。的Java SQL例外,沒有合適的驅動程序發現

 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();   

     conn = DriverManager.getConnection(url, USER_NAME, USER_PW);   
     getSelectData(); 
     conn.close(); 

    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }catch (SQLException sqe){ 
     sqe.printStackTrace(); 
    } 

它拋出這個:

發狂的事情是,如果我硬編碼的連接如字符串,而不是從屬性得到它的文件,它工作正常。

[#|2011-03-23T19:24:35.718-0400|SEVERE|oracle-glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=35;_ThreadName=p: thread-pool-1; w: 9;|java.sql.SQLException: No suitable driver found for "jdbc:sqlserver://127.0.0.1:1433;Instance=SQLEXPRESS;databaseName=gm4;user=pwd;password=xxxx;"; 
    at java.sql.DriverManager.getConnection(DriverManager.java:602) 
    at java.sql.DriverManager.getConnection(DriverManager.java:185) 
    at com.pylon.datamain.pylonData.initFetch(pylonData.java:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128) 
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5292) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367) 
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5264) 
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5252) 
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:201) 
    at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:75) 
    at $Proxy229.initFetch(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:146) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:176) 
    at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:682) 
    at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:216) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1841) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1695) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1078) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:221) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:797) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:561) 
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2558) 
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492) 
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528) 
|#] 
+2

確定連接字符串正是'JDBC:SQLSERVER://127.0.0.1:1433;實例= SQLEXPRESS;的databaseName = GM4;用戶= PWD;密碼= xxxx;'當你硬編碼和嘗試? – adarshr 2011-03-23 23:44:51

回答

3

看起來像你的驅動程序不能在你的classpath找到。一個快速的方法來做到這一點,是駕駛者(的.jar文件)添加到Windows上的javaroot/lib/ext文件夾,在Mac上的文件夾/Library/Java/Extensions

編輯:這可能不是你的問題,因爲你可以把它通過不使用屬性文件的工作。我會離開我的答案站在反正,作爲一般建議爲調試「找不到驅動程序」 - 問題,以防其他人可能有用。即使它微不足道,它應該是第一件要檢查的事情。

0

感謝弗雷德裏克,

其實我覺得SQLServer的JDBC罐子被損壞?我下載了一個新的,並沒有因爲你的指示,現在它的工作原理。

感謝 再次

PS嘗試了投你的答案,但它不會讓我,直到我打了一定的水平:{

1

發狂的事情是,如果我硬編碼的連接如字符串,而不是從屬性文件中得到它的工作正常。

屬性文件中的值必須不加引號。

db.url=jdbc:somesql://hostname:port/database 

String url="jdbc:somesql://hostname:port/database"; 
相關問題