调用存储过程中的java对象作为参数

时间:2010-11-09 05:31:15

标签: java

我想知道我们是否可以将存储过程调用中的java对象作为参数传递。这是我使用存储过程调用的java代码。请帮我找到解决方案

public void addPatientInfo(PatientInfo patientInfo) throws SQLException
{   
    CallableStatement cst = null;

    try {
        logger.info("Enter addPatientInfo");
        dbConnection = DbConnectionImpl.getDbConnection(dbConnInfo);
        dbConnection.setAutoCommit(false);
        cst = dbConnection.prepareCall("{ call add_patient(?,?,?,?,?,?,?,?,?,?) }");

        cst.setInt(1, patientInfo.getSalutationType().getSalutationTypeId());
        cst.setString(2, patientInfo.getFirstName());
        cst.setString(3, patientInfo.getMiddleName());
        cst.setString(4, patientInfo.getLastName());
        cst.setString(5, patientInfo.getGender());
        cst.setString(6, patientInfo.getDob());
        cst.setString(7, patientInfo.getOccupation());
        cst.setInt(8, ApplicationConstants.OWNER_TYPE_PATIENT);
        cst.setString(9, patientInfo.getEducation());
        cst.setString(10,patientInfo.getPatientIdentityNo());

        cst.execute();
        dbConnection.commit();
    }

2 个答案:

答案 0 :(得分:0)

听起来你在问你是否可以这样做:

cst = dbConnection.prepareCall("{ call add_patient(?,?,?,?,?,?,?,?,?,?) }");
cst.setObject(1, patientInfo);

在获取准备好的语句以了解要分配给哪些数据库字段的属性的意义上,答案是否定的。

虽然PreparedStatement类上实际上有一个setObject()。但它侧重于产生特定输出的特定范围的可接受类别。 Java bean不在该列表中。

答案 1 :(得分:0)

我明白你在说什么......

有办法, 但为此你必须create an object in Oracle,并将其映射到Java Object。