yiranxijie 2015-05-25 06:25 采纳率: 0%
浏览 1617

Java调用存储国过程报错

调用代码如下,求大神指正

 package com.lofter.svntesr;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.commons.dbcp.DelegatingConnection;

import oracle.jdbc.OracleTypes;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;

import com.lofter.bean.ProcedureBean;
import com.lofter.dao.MyProperties;

public class ProcedureTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String user = "scott";
        String pwd = "a";

        Connection conn = null;
        CallableStatement cs = null;
        ResultSet rs = null;

        List<ProcedureBean> list = new ArrayList<ProcedureBean>();
        for (int i = 1; i <= 5; i++) {
            String r = i + "";
            list.add(new ProcedureBean(r, r, "0"));
        }
        try {
            Class.forName( MyProperties.getInstance().getProperty("driverClassName"));
            DataSource ds=BasicDataSourceFactory.createDataSource(  MyProperties.getInstance());
            conn=ds.getConnection();
            System.out.println(conn);

//这句老是报 :Message file 'oracle.jdbc.driver.Messages' is missing
            StructDescriptor recDesc = StructDescriptor.createDescriptor(
                    "type_array", ((DelegatingConnection)conn).getDelegate());

            ArrayList<STRUCT> pstruct = new ArrayList<STRUCT>();
            for (ProcedureBean pb : list) {
                Object[] objs = new Object[3];
                objs[0] = pb.getUserid();
                objs[1] = pb.getTopicid();
                objs[2] = pb.getRecord();
                STRUCT item = new STRUCT(recDesc, conn, objs);
                pstruct.add(item);
            }

            ArrayDescriptor ad = ArrayDescriptor.createDescriptor(
                    "type_array_tbl", conn);
            oracle.sql.ARRAY array = new oracle.sql.ARRAY(ad, conn, pstruct.toArray());

            cs = conn.prepareCall("{call readRecord(?,?)}");
            cs.setArray(1, array);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            rs = (ResultSet) cs.getObject(2);
            while (rs.next()) {
                System.out.println("userid:" + rs.getString(1) + "\t"
                        + "topicid:" + rs.getString(2) + "\t" + "record:"
                        + rs.getString(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                    if (cs != null) {
                        cs.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }


}

  • 写回答

2条回答 默认 最新

  • 王亟亟 博客专家认证 2015-05-27 01:48
    关注

    看看jar包引入有没有少东西,看看驱动jar包对不对

    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64