在工作中,我们为其他服务提供文件。它们的大小在5mo到500mo之间。 我们想使用 Json 而不是 XML,但我想知道我们的客户如何能够 以简单的方式将这些文件上传到他们的数据库(Oracle 或 Mysql)中。 我的意思是,我在 Mysql 或 oracle 中找不到 Web APi 或函数或工具来执行此操作。 我知道很容易逐个数据地加载一个小的 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 结构存储在简单表的单列中。
像这样: 表员工:列是 id、FirstName、lastName 和 表salaryHistory:列是id、order、salary
并且每个数据都必须放在好列中,例如名字中的“John”,姓氏中的“Doe”,然后表 salaryHistory 的新行中的“1000”,salaryHistory 的另一新行中的“2000”等等。
最佳答案
从 MySQL 5.7 开始,出现了一种新的数据类型:JSON。 请查看 here 了解更多详细信息。
Example(适用于 Oracle 12c):
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
)
关于java - 在Mysql或Oracle数据库中加载一个大的json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172269/