首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

使用 Jython 透過 zxJDBC 連線 Oracle 資料庫

     編輯:Oracle 資料庫基礎

環境準備

  1. JDK/JRE 已安裝並設定 JAVA_HOME。
  2. Jython 2.2.1:java -jar jython_installer-2.2.1.jar 安裝至 C:\jython2.2.1。
  3. zxJDBC 2.1:解壓 zxJDBC.jar 至 C:\tmp。
  4. Oracle JDBC 驅動:依 JDK 版本選擇 ojdbc14.jar (JDK 1.4/1.5)、ojdbc5.jar (JDK 1.6)、ojdbc6.jar (JDK 1.7+),放入 C:\tmp。

設定 CLASSPATH

set CLASSPATH=C:\tmp\ojdbc5.jar;C:\tmp\zxJDBC.jar;%CLASSPATH%

Jython 腳本範例 (ora.py)

from oracle.jdbc.driver import OracleDriver
from java.sql import DriverManager

def connect(un, pw, sid, host, port):
    driver = OracleDriver()
    DriverManager.registerDriver(driver)
    url = "jdbc:oracle:thin:@%s:%s:%s" % (host, port, sid)
    conn = DriverManager.getConnection(url, un, pw)
    return conn

def do_stuff(conn):
    stmt = conn.createStatement()
    rset = stmt.executeQuery("SELECT banner FROM sys.v_$version")
    while rset.next():
        print rset.getString(1)
    stmt.close()

if __name__ == "__main__":
    un   = "ebc20"
    pw   = "abc"
    sid  = "abc"
    host = "10.4.231.16"
    port = "1521"
    conn = connect(un, pw, sid, host, port)
    do_stuff(conn)
    conn.close()

執行

C:\jython2.2.1\jython.bat C:\tmp\ora.py

輸出 Oracle 版本橫幅資訊,驗證連線成功。

進階用法提示

  • PreparedStatement / 繫結變數:同 Java 用法,`conn.prepareStatement(sql)` + `setString` 等。
  • 呼叫預存程序:`conn.prepareCall("{call pkg.proc(?,?)}")`。
  • 資料來源 (DataSource):生產環境建議配置 JNDI DataSource,透過 `InitialContext.lookup` 取得連線,支援連線池。
  • zxJDBC 封裝:zxJDBC 提供 Python 風格的 `cursor.execute(sql, params)`、`with closing(conn.cursor()) as cur:` 等語法糖,可簡化代碼。

常見問題

  1. ClassNotFoundException:檢查 CLASSPATH 包含正確 ojdbc 版本。
  2. ORA-12505:SID/Service Name 錯誤,確認 `lsnrctl status` 註冊的服務名。
  3. ORA-28040:12c+ 預設不允許 10g 客戶端認證,需設定 `SQLNET.ALLOWED_LOGON_VERSION_SERVER=10` 或升級驅動。

結語

Jython + zxJDBC 讓 Python 語法愛好者在 JVM 上輕量級存取 Oracle,適合腳本自動化、ETL 原型、測試驗證等場景。生產核心業務仍建議使用成熟的 Java/JDBC 或 Python/cx_Oracle 堆疊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved