मैं जेडथन में रनटाइम पर जेडीबीसी ड्राइवर कैसे जोड़ सकता हूं? क्लासस्पैट का उपयोग करना, लेकिन sys.path का उपयोग zxJDBC के साथ काम नहीं करता है, भले ही कक्षा ठीक से आयात की जाती है और इसे ज्योथन दुभाषिया संकेत से छेड़छाड़ की जा सकती है।ज्योथन क्लास्स्पैट, sys.path और जेडीबीसी ड्राइवर
क्यों यह काम करता है:
$ CLASSPATH=/tmp/jtds\-1.2.5.jar ./jython
*sys-package-mgr*: processing new jar, '/private/tmp/jtds-1.2.5.jar'
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_20
Type "help", "copyright", "credits" or "license" for more information.
>>> from java.lang import Class
>>> Class.forName('net.sourceforge.jtds.jdbc.Driver')
<type 'net.sourceforge.jtds.jdbc.Driver'>
लेकिन यह नहीं करता है?
$ ./jython
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_20
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.extend(['/tmp/jtds-1.2.5.jar'])
>>> from java.lang import Class
>>> Class.forName('net.sourceforge.jtds.jdbc.Driver')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
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)
java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
>>> sys.path
['', '/home/me/pkg/jython2.5.1/Lib/site-packages/distribute-0.6.13-py2.5.egg', '/home/me/pkg/jython2.5.1/Lib', '__classpath__', '__pyclasspath__/', '/home/me/pkg/jython2.5.1/Lib/site-packages', '/home/me/pkg/jython2.5.1/Lib/site-packages/setuptools-0.6c11-py2.5.egg-info', '/tmp/jtds-1.2.5.jar']
>>> import net.sourceforge.jtds.jdbc.Driver as Driver
>>> drv = Driver()
>>> drv
jTDS 1.2.5
क्या इसमें क्लासलोडर के साथ कुछ करना है?
ऐसा लगता है कि कारण यह है कि जेडीबीसी ड्राइवर प्रबंधक केवल सिस्टम क्लासलोडर का उपयोग करके लोड किए गए ड्राइवरों का उपयोग करता है, भले ही पंजीकृत है, एक ड्राइवर उदाहरण है, कक्षा नहीं। आपके लिंक के लिए धन्यवाद। किसी भी अन्य पढ़ने के लिए, http://stackoverflow.com/questions/288828/how-to-use-a-jdbc-driver-from-an-arbitrary-location और http://www.kfu.com/~nsayer/ जावा/dyn-jdbc.html सहायक हो सकता है। – lmz
-1 मृत लिंक, तो समाधान अब खो गया है। – brice
लिंक ठीक काम करता है। – hhhhhh