用Java实现将本机表数据转到Oracle表中

本文介绍了如何使用Java将本地数据转换并存储到Oracle数据库中。首先在Oracle中创建自定义对象类型和数组类型,然后建立package和package body用于数据插入。在Java部分,通过建立数据库连接,调用Oracle存储过程,实现了数据的转换和插入。
摘要由CSDN通过智能技术生成

一、Oracle部分

1、在Oracle新建自定义类型,对应要传入oracle的字段,类型不一定一致,因为时间类型不好处理,为了处理方便将date/number类型均对应为varchar2类型

CREATE OR REPLACE TYPE alarm_content_type AS OBJECT
  (
  con_addr varchar2 (10) ,
  acq_no varchar2 (5) ,
  mea_no varchar2 (5) ,
   alarm_day varchar2 (20) ,  
  alarm_value varchar2 (5) ,
  data_type varchar2 (5) ,
  alarm_data varchar2 (15)
  )
其中acq_no对应为number,alarm_day对应为date类型

2、在Oracle新建对应的自定义类型数组

CREATE OR REPLACE TYPE alarm_content_array AS TABLE OF alarm_content_type

3、在Oracle建立package及 package bodies

CREATE OR REPLACE PACKAGE alarm_content_pck AS
  PROCEDURE insert_object(d alarm_content_array, tbname varchar2);
END alarm_content_pck;

 

CREATE OR REPLACE PACKAGE BODY alarm_content_pck AS
  PROCEDURE insert_object (d alarm_content_array, tbname varchar2) AS
  SqlText varchar2 (500);
  BEGIN
    FOR i IN d.FIRST..d.LAST
    LOOP
      SqlText := 'INSERT INTO ' || tbname 
      || ' VALUES(''' || d(i).con_addr
      || ''', ' || d(i).acq_no || ', ' || d(i).mea_no
      || ', decode(' || d(i).alarm_day || ', null , null, to_date(''' ||d(i).alarm_day || ''', ''yyyy-mm-dd''' || '))'
      || ', ''' || d(i).alarm_value  || ''', ''' || d(i).data_type  
      || ''', ' || d(i).alarm_data   
      || ')';  
      EXECUTE IMMEDIATE SqlText;  
    END LOOP;      
   END insert_object;
END alarm_content_pck;

其中参数d 为传入的数据, tbname 为插入Oracle的表名
二、Java部分

1、Oracle的链接、关闭等

  1. package com.techen.database;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement; 
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import oracle.jdbc.OracleCallableStatement;
  10. import oracle.sql.ARRAY;
  11. import oracle.sql.ArrayDescriptor;
  12. import oracle.sql.STRUCT;
  13. import oracle.sql.StructDescriptor;
  14. import com.techen.database.DataDb;
  15. import com.techen.database.ProcedureParam;
  16. /**
  17.  * Oracle接口类
  18.  *
  19.  */
  20. public class OracleDb
  21. {
  22.     public static Connection connection = null// 连接到数据库的对象
  23.     private static Statement state = null// Statement对象
  24.     private static String URL = null;
  25.     private static String userName;
  26.     private static String passWord;
  27.     
  28.     /**
  29.      * 建立到内存数据库的连接
  30.      * 
  31.      * @return 成功与否
  32.      */
  33.     public OracleDb(String aURL, String aUserName, String aPassWord)
  34.     {
  35.         URL = aURL;
  36.         userName = aUserName;
  37.         passWord = aPassWord;
  38.     }
  39.     
  40.     /**
  41.      * 建立与Oracle数据库的连接
  42.      * 
  43.      * @return 成功与否
  44.      */
  45.     public boolean createConnection()
  46.     {
  47.         boolean bFlag = false;
  48.         if (connection != null)
  49.             closeConnection();
  50. <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值