JPA - 使用BLOB参数调用存储过程

时间:2014-10-20 15:47:03

标签: jpa stored-procedures blob

我正在使用JPA 2.0。我想调用Oracle存储过程。其中一个参数是BLOB。

PROCEDURE test(file IN BLOB);

我正在尝试使用下一个代码调用它:

byte[] bytes = ...;
Query query = em.createNativeQuery("{ CALL test(?) }");
query.setParameter(1, bytes);
query.executeUpdate();

我收到了下一个错误:

PLS-00306:调用'test'

时参数的数量或类型错误

问题是如何传递blob参数,因为我能够在没有blob参数的情况下调用其他存储过程。

由于

1 个答案:

答案 0 :(得分:0)

试试这个:

@Override
public void insertData(DataSource ds, byte[] data) throws SQLException {
    Connection conn = null;
    CallableStatement cstmt = null;

    try {
        conn = ds.getConnection();

        cstmt = conn.prepareCall("{call test (?)}");
        Blob blob = conn.createBlob();
        blob.setBytes(1, data);

        cstmt.setBlob(1, blob);

        cstmt.execute();
    } finally {
        if (cstmt != null) {
            cstmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}