【问题标题】:jaydebeapi latest update to 1.0.0 causing connection errorjaydebeapi 最新更新到 1.0.0 导致连接错误
【发布时间】:2017-05-29 12:00:17
【问题描述】:

最近,jaydebeapi 更新,我现在无法连接我的旧代码。 https://github.com/baztian/jaydebeapi

这是来自 jaydebeapi 源的连接文档:

>>> import jaydebeapi
>>> conn = jaydebeapi.connect('org.hsqldb.jdbcDriver',
...                           'jdbc:hsqldb:mem:.',
...                           ['SA', ''],
...                           '/path/to/hsqldb.jar',)
>>> curs = conn.cursor()

这就是我的做法:

 53     curs, conn = None, None
 54     try:
 55         thisdir = os.path.dirname(os.path.abspath(__file__))
 56 
 57         join = os.path.join
 58         conn = jaydebeapi.connect('com.teradata.jdbc.TeraDriver',
 59                                   ['jdbc:teradata://%s/CHARSET=UTF8' % system, username, password],
 60                                   jars=[join(thisdir, 'lib/tdgssconfig.jar'),
 61                                         join(thisdir, 'lib/terajdbc4.jar')])
 62 
 63 
 64         curs = conn.cursor()

我得到的错误:

  join(thisdir, 'lib/terajdbc4.jar')])
      File "/app/.heroku/python/lib/python2.7/site-packages/jaydebeapi/__init__.py", line 380, in connect
        jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
      File "/app/.heroku/python/lib/python2.7/site-packages/jaydebeapi/__init__.py", line 199, in _jdbc_connect_jpype
        return jpype.java.sql.DriverManager.getConnection(url, *dargs)
    RuntimeError: No matching overloads found. at native/common/jp_method.cpp:121

我的代码以前可以运行,但随着新的更新,它停止了。有人可以告诉我我需要对我的代码进行哪些更改吗?

【问题讨论】:

    标签: python jaydebeapi


    【解决方案1】:
    conn = jaydebeapi.connect('com.teradata.jdbc.TeraDriver',
                              'jdbc:teradata://%s/CHARSET=UTF8' % system,
                              [username, password],
                              jars=[join(thisdir, 'lib/tdgssconfig.jar'),
                                         join(thisdir, 'lib/terajdbc4.jar')])
    

    应该可以解决问题。使用 JayDeBeApi 1.0.0,您现在可以将连接属性指定为字典:

    conn = jaydebeapi.connect('com.teradata.jdbc.TeraDriver',
                              'jdbc:teradata://%s',
                              {'user': username, 'password': password,
                               'CHARSET': 'UTF8'},
                              jars=[join(thisdir, 'lib/tdgssconfig.jar'),
                                         join(thisdir, 'lib/terajdbc4.jar')])
    

    changelog 通知潜在的不兼容性。连接方法的参数已更改,应该比以前更清晰。文档也正确更新。

    看看

    >>> help(jaydebeapi.connect)
    
    connect(jclassname, url, driver_args=None, jars=None, libs=None)
        Open a connection to a database using a JDBC driver and return
        a Connection instance.
    
        jclassname: Full qualified Java class name of the JDBC driver.
        url: Database url as required by the JDBC driver.
        driver_args: Dictionary or sequence of arguments to be passed to
               the Java DriverManager.getConnection method. Usually
               sequence of username and password for the db. Alternatively
               a dictionary of connection arguments (where `user` and
               `password` would probably be included). See
               http://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html
               for more details
        jars: Jar filename or sequence of filenames for the JDBC driver
        libs: Dll/so filenames or sequence of dlls/sos used as shared
              library by the JDBC driver
    

    【讨论】:

    • 谢谢,我也尝试在我的 requirements.txt 文件中将版本锁定为 0.2.0,但它似乎没有用。 jaydebeapi==0.2.0
    • 但是我发布的代码有效吗?确实应该。
    • 请仔细检查引号、大括号等
    猜你喜欢
    • 2017-02-08
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多