有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数据库如何将java对象传递给oracle存储过程,详细信息如下

我的ORACLE表的结构如下

desc extraction_log1
           Name                           Null                        
                                                     Type                                                                                                                                                                                          

 ------------------------------ -------- ------------------------------------------------------------     ----------------------------------------------------------------------------------------------------      ----------------------------- 
 ROW_NUM                        NOT NULL            NUMBER                                                                                                                                                                                        
DATE_TIME                                        TIMESTAMP(8)                                                                                                                                                                                  
USER_NAME                                         VARCHAR2(32)                                                                                                                                                                                  
PLATFORM_NAME                                      VARCHAR2(20)                                                                                                                                                                                  
R_OBJECT_ID                                       VARCHAR2(16)   

然后我在oracle中创建了一个对象类型

create or replace type EXTRACTION_LOG_TYPE as object    (          

 USER_NAME VARCHAR2(32), 
 R_OBJECT_ID VARCHAR2(16), 

  );

然后我在一个包中创建了一个过程

create or replace package body PAC_BEAN is 
  --The insert procedure will receive EXTRACTION_LOG_TYPE and put it into table EXTRACTION_LOG1.  

   procedure PRO_INSERT_LOG(ELT in EXTRACTION_LOG_TYPE) is 

   begin 

      insert into EXTRACTION_LOG1 ( R_OBJECT_ID, USER_NAME)
           values (ELT.R_OBJECT_ID, ELT.USER_NAME);  

      commit;  

 exception  

  when others then 
    rollback;  

  end PRO_INSERT_LOG;  
  end PAC_BEAN; 

在java方面,我已经声明了一个bean

public class ExtractionLogType {        
        //Name declared in Oracle        
   public static final String ORACLE_OBJECT_NAME = "EXTRACTION_LOG_TYPE";            
   //The attributes        
  private String  R_OBJECT_ID;        
  private String USER_NAME;      
  //setters and getters      
  public  String getR_OBJECT_ID() {
    return R_OBJECT_ID;
  }
  public  void setR_OBJECT_ID(String rOBJECTID) {
    R_OBJECT_ID = rOBJECTID;
    }
  public  String getUSER_NAME() {
    return USER_NAME;
   }
  public  void setUSER_NAME(String uSERNAME) {
    USER_NAME = uSERNAME;
   }


            } 

在我的班上

               import java.sql.CallableStatement;
               import java.sql.Connection;
                 import java.sql.DriverManager;
               import java.sql.SQLException;

            public class DBLogger{     
          String dbUrl;     
        Connection con;      
     //constructor for creation of  connection object 
        as and when an object of DBLogger is instantiated     
        public DBLogger(){           
    dbUrl = "jdbc:oracle:thin@my url";        
         try {             
        //load Oracle Driver class             
        Class.forName("oracle.jdbc.driver.OracleDriver");     
        } catch (ClassNotFoundException e) {         
            e.printStackTrace();         
            System.err.println("Oracle driver class not found");       
            }      
        try {         
            //instantiate connection object       
            con = DriverManager.getConnectio (dbUrl,"userId","pwd");                
            } catch (SQLException e) {      
                e.printStackTrace();                       
              System.err.println("Connection object to oracle cant be established");   
                }    
            } 
        public static void main(String args[]){  
     try{
    DBLogger db=new DBLogger();        
    CallableStatement cs = null;        
    ExtractionLogType elt=new  ExtractionLogType();         
    elt.setR_OBJECT_ID("79479479A900");       
    elt.setUSER_NAME("Jeevan");               
    cs = db.con.prepareCall("{call PAC_BEAN.PRO_INSERT_LOG(?)}");                
    /*                     
     * *code to insert the above object into our Database               
     *       
    */
    cs.execute();           
    System.out.println("insert procedure executed successfully");                  
    db.con.close();      
    }  //end try  
catch (SQLException e) {      
    e.printStackTrace();   }     
catch(Exception e) {             e.printStackTrace();        
}   
}

       }         

我想不出将对象插入数据库的代码
有人能给我提一下建议吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    您必须为数据库类型定义一个数组描述符,此示例可以帮助您:

    final ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("EXTRACTION_LOG_TYPE", con);
    // create an Object Array
    Object[] data = new Object[2];
    // set the values in order of appearance
    data[0] = elt.getUSER_NAME();
    data[1] = elt.getR_OBJECT_ID();
    // Create the Array
    ARRAY array = new ARRAY(descriptor, con, data);
    // put it on your statement
    cs.setArray(1, array);
    // execute ...