在Mysql或Oracle数据库

时间:2016-02-03 08:48:45

标签: java php mysql json oracle

在工作中,我们提供其他服务的文件。它们的大小在5mo到500mo之间。 我们想使用Json而不是XML,但我想知道我们的客户可以如何 在他们的数据库,Oracle或Mysql中以简单的方式上传这些文件。 我的意思是,我无法在Web上找到APi或Mysql或oracle中的函数或工具来做到这一点。 我知道按数据处理数据很容易加载一个小的Json文件,解码每个文件 对象或数组,并将它们放在数据库中的正确位置。 但还有其他方法可以做到这一点,比如Oracle中的sqlloader吗? 如果是这样,我们的文件大小不是太大而不能生成JSON文件,例如JAVA? 我想这可能很难自动完成这个加载工作,特别是因为像这样的数组:

{"employees":[
    {"firstName":"John", "lastName":"Doe", "salaryHistory":[1000,2000,3000]},
    {"firstName":"Anna", "lastName":"Smith", "salaryHistory":[500,800]},
    {"firstName":"Peter", "lastName":"Jones", "salaryHistory":[400]}
]}

其中salaryHistory必须产生问题,因为它们的大小不同,并且数据不是疯狂的 在同一张桌子里。 任何想法或帮助都会受到欢迎!

修改

我正在寻找一个解决方案,将每个数据放在一个表的好列中,我不需要将Json结构存储在一个简单表的列中。

像这样: table employees:列是id,FirstName,lastName和 table salaryHistory:列是id,order,salary

并且每个数据必须进入好的栏目,例如" John"在名字中," Doe"在姓氏中,然后" 1000"在一排新的表salaryHistory," 2000"在另一个新的行薪历史等等。

1 个答案:

答案 0 :(得分:0)

从MySQL 5.7开始,有一种新的数据类型:JSON。 请查看here了解更多详情。

Oracle 12c的

Example

create table transactions (
   id      number not null primary key,
   trans_msg       clob,
   constraint 
   check_json check (trans_msg is json)
);

常规插入:

insert into transactions
values
(
   sys_guid(),
   systimestamp,
'{
   "TransId"         :   3,
   "TransDate"       :   "01-JAN-2015",
   "TransTime"       :   "10:05:00",
   "TransType"       :   "Deposit",
   "AccountNumber"   :   125,
   "AccountName"     :   "Smith, Jane",
   "TransAmount"     :   300.00,
   "Location"        :   "website",
   "CashierId"       :   null,
   "ATMDetails"      :   null,
   "WebDetails"      : {
                     "URL"   : "www.proligence.com/acme/dep.htm"
              },
   "Source"   :   "Transfer",
   "TransferDetails"   :
            {
               "FromBankRouting"   : "012345678",
               "FromAccountNo"   : "1234567890",
               "FromAccountType"   : "Checking"
            }
}'
)
/

SQL * Loader控制文件和数据文件:

load data into table transactions
fields terminated by ','
(
  trans_id    sequence(max,1),
  fname       filler char(80),
  trans_body  lobfile(fname) terminated by EOF
)