gpt4 book ai didi

python - 如何通过 JDBC 从 Oracle 数据库检索实际的 blob 数据而不是 "oracle.sql.blob@"?

转载 作者:行者123 更新时间:2023-12-01 06:41:54 25 4
gpt4 key购买 nike

我们正在使用 Jython 和 JDBC 从 Oracle 数据库检索数据,但 BLOB 字段不返回 Blob 数据。我们看到的不是实际的 blob 数据,而是如下所示的字段:

oracle.sql.BLOB@10e8881

如果我们使用 JDBC 连接在 Razor SQL 中执行相同的查询,我们可以在结果文本中看到 blob,它们看起来很好。 (我们在字段中根本看不到“oracle.sql.Blob”。)

这是执行查询的 Python 代码和 SQL:

cur = connect_to_database()
query = "SELECT * FROM {} WHERE ROWNUM = 1".format(table_name)
cur.execute(query)
results = cur.fetchall()
print results

当我们打印结果时,其中一列具有上面显示的值。我们没有看到二进制 Blob 。

以下是我们执行 Python 脚本的方式:

C:\jython2.7.0\bin\jython.exe C:\path_to_our_script.py

我们如何获取返回的 blob 中的实际二进制数据,而不是我们看到的“oracle.sql.blob@”文本?

最佳答案

如果您可以选择升级到 zxJDBC 而不是纯 JDBC,那么您将获得开箱即用的 blob 到数组转换支持。

create table T_BLOB (b BLOB,c INTEGER);
insert into t_blob(b,c) values ( utl_raw.cast_to_raw('test1'),1);
insert into t_blob(b,c) values ( utl_raw.cast_to_raw('test2'),1);
commit;

获取 blob 和 int 值:

from com.ziclix.python.sql import zxJDBC

def connect():
p = {}
p['URL'] = 'jdbc:oracle:thin:user/password@192.168.0.5:1521:dev'
db = apply(zxJDBC.connectx, ("oracle.jdbc.pool.OracleDataSource",), p)
return db.cursor()

cur = connect()
query = "SELECT * FROM t_blob"
cur.execute(query)
print cur.fetchall()

它打印:

[(array('b', [116, 101, 115, 116, 49]), 1.0), (array('b', [116, 101, 115, 116, 50]), 1.0)]

它可以使用以下版本:

  • oracle:Oracle Database 11g 企业版版本 11.2.0.3.0 - Sun Solaris 上的 64 位生产
  • java:java1.8.0_231 上的 [Java HotSpot(TM) 64 位服务器 VM (Oracle Corporation)]
  • jython:Jython 2.7.0(默认值:9987c746f838,2015 年 4 月 29 日,02:25:11)
  • jdbc:jdbc7.jar(实现版本:12.1.0.2.0)

关于python - 如何通过 JDBC 从 Oracle 数据库检索实际的 blob 数据而不是 "oracle.sql.blob@"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com