【问题标题】:Error in casting of objects in oracle multimedia在 oracle 多媒体中投射对象时出错
【发布时间】:2014-02-16 18:09:27
【问题描述】:

我编写了一些从数据库中检索视频的代码。此视频存储为 BLOB 文件。我已经在

    package edu.jay.fyp.featureextractor.database;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleResultSet;
import oracle.ord.im.OrdVideo;

public class OracleConnector {

    private static final String dbUrl = "jdbc:oracle:thin:@jay_tank-pc:1521:fyp";
    private static final String user = "SYSTEM";
    private static final String pwd = "xyz";
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.OracleDriver");
            OracleConnection connection = (OracleConnection) DriverManager.getConnection(dbUrl,user,pwd);
            System.out.println("Connected");
            String query = "select video_name, video_content from system.videos where sr_no = '1'";
            PreparedStatement ps = connection.prepareStatement(query);
            OracleResultSet rs = (OracleResultSet) ps.executeQuery();
            OrdVideo videoProxy = null;
            if(rs.next()){

                 rs.getORAData("video_content", OrdVideo.getORADataFactory());
            }
            //System.out.println(videoProxy.getBitRate());

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

我使用的代码类似于 Oracle 文档中给出的代码,但是当我运行我的代码时,我得到了以下异常:

Exception in thread "main" java.lang.ClassCastException: oracle.sql.BLOB cannot be cast to oracle.sql.STRUCT
    at oracle.ord.im.OrdVideo.create(OrdVideo.java:1797)
    at oracle.ord.im.OrdVideo$1.create(OrdVideo.java:1786)
    at oracle.jdbc.driver.Accessor.getORAData(Accessor.java:1387)
    at oracle.jdbc.driver.OracleResultSetImpl.getORAData(OracleResultSetImpl.java:1408)
    at oracle.jdbc.driver.OracleResultSet.getORAData(OracleResultSet.java:632)
    at edu.jay.fyp.featureextractor.database.OracleConnector.main(OracleConnector.java:28)

【问题讨论】:

  • 错误在你文件的第28行,你能指出是哪一行吗?
  • rs.getORAData("video_content", OrdVideo.getORADataFactory());

标签: java database oracle multimedia


【解决方案1】:

好吧,我对此知之甚少,但我做了一些研究。

这个错误,如果你读到它说不能将 blob 转换为结构。这会提示您为 getORAData() 提供了错误的参数。

我去看了定义,它说:

Get the column value as an instance of a subclass of ORAData

好吧,如果您查看 ORAData 定义,它似乎不支持 BLOB,而只支持更常见的值类型。

所以,显然这不是从数据库中检索 BLOB 的方法。

搜索如何实际做到这一点,我发现了这个Java: Reading Blob from Oracle

在回复中你可以看到他建议使用ResultSet.getBinaryStream()

所以你的代码应该是:

rs.getBinaryStream("video_content")

或者

rs.getBytes("video_content")

当然,现在您必须获取 InputStream 或 byte[] 结果并对它们进行处理,但我将把它留给您。

【讨论】:

  • 我可以使用 rs.getBLOB("video_content") 从 DB 获取 BLOB。我想使用 ORDVideo 中定义的各种方法获取有关视频的信息。
  • 这似乎与您在此处提出的问题不同。该异常似乎已得到处理,因此您应该通过接受我的回答或发布您自己的解决方案将其标记为已解决,然后打开一个新问题。
猜你喜欢
  • 2014-11-28
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2014-09-01
  • 2017-03-17
  • 1970-01-01
相关资源
最近更新 更多