Jython - 尝试连接到数据库导致 java.sql l.SQLException:找不到合适的驱动程序

Posted

技术标签:

【中文标题】Jython - 尝试连接到数据库导致 java.sql l.SQLException:找不到合适的驱动程序【英文标题】:Jython - Trying to connect to database results in java.sq l.SQLException: No suitable driver found 【发布时间】:2013-01-23 04:33:23 【问题描述】:

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

我正在尝试连接到 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 验证了类路径已正确设置,并且我看到 ojdbc6.jar 正在 catalina.out 中处理。 (注意:实际安装路径已删除)

进程参数:

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

【问题讨论】:

可能重复***.com/questions/1054105/… 【参考方案1】:

我也无法正常工作。我遵循了 Oracle 教程(此处为:http://www.oracle.com/technetwork/articles/dsl/mastering-oracle-python-providers-1395759.html),但是,当我切换到使用上述文章中描述的 Oracle 调用接口 (OCI) 方法时,一切正常。正如文章所述,使用 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()

【讨论】:

以上是关于Jython - 尝试连接到数据库导致 java.sql l.SQLException:找不到合适的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

jython zxJDBC:如何从游标中获取字典?

使用 Jython 从 Java 代码调用 Python 导致错误:ImportError: no module named nltk

是啥导致了这个 Heroku mysql 连接错误? (尝试将前端连接到后端 POST 请求)

使用 ODBC 连接到数据库会导致警告并且不打印任何内容

连接到同一数据库的两个cron作业会导致连接失败

尝试连接到 MySQL 数据库时 java 中的 NullPointerException