[英]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應該是正確的瘦客戶端。 有人知道是什么原因引起的錯誤嗎?
我也無法正常工作。 但是,當我切換到使用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.