繁体   English   中英

Jython-尝试连接到java.sq l.SQLException中的数据库结果:找不到合适的驱动程序

[英]Jython - Trying to connect to database results in java.sq l.SQLException: No suitable driver found

我正在使用Confluence脚本插件在Confluence中编写Jython宏。 我有一些升级到Confluence和插件后最近停止工作的代码。 我尝试了在SO和Web上找到的各种可能的解决方案,但没有任何运气。

我正在尝试连接到Oracle数据库以查询一些值。 这是我的代码:

import sys
from oracle.jdbc.driver import OracleDriver
from java.sql import DriverManager, SQLRecoverableException

def connect(user, pw, sid, host, port):
    connection = None
    DriverManager.registerDriver(OracleDriver())

    try:
        connection = DriverManager.getConnection("jdbc:oracle:thin:@"+host+":"+port+":"+sid, user, pw)
    except SQLRecoverableException, e:
        print 'ERROR: Cannot connect to database %s %s %s: %s.' % (host, port, sid, e)
    except:
        print 'ERROR: Cannot connect to database %s %s %s: %s.' % (host, port, sid, sys.exc_info()[1])

    return connection

conn = connect(db_user, db_pw, db_sid, db_host, db_port)

运行此命令将导致以下错误(注意:真实主机名,端口和sid已删除):

ERROR: Cannot connect to database host port sid: java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@host:port:sid.

这个错误使我认为找不到ojdbc6.jar或不在正确的目录中。 为了以防万一,我将其明确添加到类路径中。 这仍然没有用。 将其添加到类路径后,我通过检查进程args验证了是否正确设置了类路径,并且我发现在catalina.out中正在处理ojdbc6.jar。 (注意:实际安装路径已删除)

处理参数:

argv[21]: -classpath
argv[22]: :<install_path>/atlassian-confluence-4.3.1/lib/ojdbc6.jar:<install_path>/atlassian-confluence-4.3.1/bin/bootstrap.jar

catalina.out:

*sys-package-mgr*: processing new jar, '<install_path>/atlassian-confluence-4.3.1/lib/ojdbc6.jar'

我还验证了我们当前正在使用jdk1.6.0_33,因此ojdbc6.jar应该是正确的瘦客户端。 有人知道是什么原因引起的错误吗?

  • JDK:Sun 1.6.0_33-b03
  • Jython:2.5.2
  • 合流:4.3.1
  • 脚本插件:4.1.0
  • 操作系统:SunOS 5.10
  • 应用服务器:Apache Tomcat / 6.0.32

我也无法正常工作。 但是,当我切换到使用Oracle Call Interface(OCI)时,我遵循了Oracle教程(在这里: http : //www.oracle.com/technetwork/articles/dsl/mastering-oracle-python-providers-1395759.html )。 )上面文章中所述的方法,一切都正常运行。 如本文所述,使用OCI具有诸如连接池等优点。这是对我有用的代码:

import sys
import java.sql.SQLException
from oracle.jdbc.pool import OracleDataSource

cs = "jdbc:oracle:thin:@localhost:1521:XE"

ods = OracleDataSource()
ods.setURL(cs)
ods.setUser("hr")
ods.setPassword("hr")
try:
    conn = ods.getConnection()
except java.sql.SQLException, e:
    print "Problem connecting to \"%s\"" % cs
    sys.exit()

stmt = conn.createStatement()
rs = stmt.executeQuery("select * from departments order by 2")

while rs.next():
    print rs.getString(2)

rs.close()
stmt.close()
conn.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM