java - 在java中生成json文件。代码正在运行。需要一些修改帮助
问题描述
我必须在 java 中创建 json 文件。当我在 where 子句中传递参数时,我可以创建 json 文件。我正在从 Oracle 数据库中读取数据下面是我的数据。
当我发送参数时Select * from Data where tablename='ITEM'
,我的代码ITEM.json
为 org 创建了相同的文件。
情况是明天我不知道 TABLENAME 列中有多少不同的表名。例如 ITEM、ORG、FEATURE 等。我可以通过在不传递参数的情况下读取数据来在 java 中创建文件吗?表示在上述数据的情况下应该有 2 个文件。ITEM.json 和 ORG.json。我不想where clause
在查询中使用。我的程序应该根据表中的数据创建文件。
我想要以下格式的数据。项目.json
{"add":[{"canonicalName":"Apple Computers","synonyms":["Apple","Apple Inc"]},{"canonicalName":"Google India","synonyms":["Google"]},{"canonicalName":"IBM","synonyms":["IBM Corporation"]}],"update":[{"canonicalName":"Infosys","synonyms":["Infosys Tech"]},{"canonicalName":"Wipro Tech","synonyms":["Wipro Technology"]}],"delete":[{"canonicalName":"IBM","synonyms":["IBM Corporation"]},{"canonicalName":"TCS"}]}
ORG.json
{"add":[{"canonicalName":"Apple Computers","synonyms":["Apple","Apple Inc"]},{"canonicalName":"Google India","synonyms":["Google"]},{"canonicalName":"IBM","synonyms":["IBM Corporation"]}],"update":[{"canonicalName":"Infosys","synonyms":["Infosys Tech"]},{"canonicalName":"Wipro Tech","synonyms":["Wipro Technology"]}],"delete":[{"canonicalName":"IBM","synonyms":["IBM Corporation"]},{"canonicalName":"TCS"}]}
我的下面的代码工作正常,但是当我where TABLENAME='ITEM'
为 ORG 传递参数 .same 时这工作正常。我希望我的代码读取表数据并根据 TABLENAME 列中的唯一值创建文件。
public String createJsonFile(String dynamicEntityName) throws Exception
{
System.out.println("Inside createJsonFile");
String query="select * from dynamicentitygtt where tablename=?";
PreparedStatement prepstatement=connection.prepareStatement(query);
prepstatement.setString(1,dynamicEntityName);
ResultSet rs=prepstatement.executeQuery();
List<EntityDataNEW> dataList= new ArrayList<EntityDataNEW>();
while(rs.next());
{
EntityDataNEW entityData= new EntityDataNEW();
String entityName=rs.getString("ORGNAME");
String synonyms=rs.getString("SYNONYMS");
entityData.setSynonyms(synonyms);
entityData.setItemname(entityName);
entityData.setOperation(rs.getString("OPERATION"));
dataList.add(entityData);
}
JsonArrayBuilder add=Json.createArrayBuilder();
JsonArrayBuilder delete=Json.createArrayBuilder();
JsonArrayBuilder update=Json.createArrayBuilder();
for(EntityDataNEW data: dataList)
{
switch(data.getOperation())
{
case "delete":
JsonObjectBuilder deleteObj=Json.createObjectBuilder();
JsonArrayBuilder deleteSynonyms=Json.createArrayBuilder();
deleteObj.add("canonicalName", data.getItemname());
deleteSynonyms.add(0,data.getSynonyms());
deleteObj.add("synonyms", data.getSynonyms());
deleteObj.add("synonyms", data.getSynonyms());
delete.add(deleteObj);
delete.add(deleteSynonyms);
break;
case "update":
JsonObjectBuilder updateObj=Json.createObjectBuilder();
JsonArrayBuilder modifySynonyms=Json.createArrayBuilder();
updateObj.add("canonicalName", data.getItemname());
modifySynonyms.add(0,data.getSynonyms());
updateObj.add("synonyms", data.getSynonyms());
update.add(updateObj);
update.add(modifySynonyms);
break;
case "add":
JsonObjectBuilder addObj=Json.createObjectBuilder();
JsonArrayBuilder addSynonyms=Json.createArrayBuilder();
addObj.add("canonicalName", data.getItemname());
addSynonyms.add(0,data.getSynonyms());
addObj.add("synonyms",addSynonyms);
add.add(addObj);
add.add(addSynonyms);
break;
default:
break;
}
rs.close();
connection.close();
}
JsonObjectBuilder mainObj= Json.createObjectBuilder();
mainObj.add("delete",delete);
mainObj.add("update", update);
mainObj.add("add",add);
String data = mainObj.build().toString();
System.out.println(data);
String filePath= ODAParams.ENTITY_FILE_PATH+"/"+dynamicEntityName+".json";
BufferedWriter out = new BufferedWriter(new FileWriter(filePath));
out.write(data);
out.close();
System.out.println("End of file writing code");
return filePath;
}
EntityDataNEW is my POJO class.
我可以根据数据创建 2 个不同的文件而不在 where 子句中传递 TABLENAME
解决方案
使用它SELECT * from Data GROUP BY tablename
,您可以按表名获取记录组。
现在根据表名,您需要创建 entityList ,例如 if table name isORG
而不是orgEntityList
name is ITEM
then itemEntityList
。
public String createJsonFile(String dynamicEntityName) throws Exception
{
System.out.println("Inside createJsonFile");
String query="select * from dynamicentitygtt GROUP BY tablename";
PreparedStatement prepstatement=connection.prepareStatement(query);
prepstatement.setString(1,dynamicEntityName);
ResultSet rs=prepstatement.executeQuery();
List<EntityDataNEW> dataList= new ArrayList<EntityDataNEW>();
String previousTableName=null;
while(rs.next());
{
EntityDataNEW entityData= new EntityDataNEW();
String tableName=rs.getString("TABLENAME");
if(previousTableName != null && !tableName.equalsIgnoreCase(previousTableName)){
entityData= new EntityDataNEW();
}
String entityName=rs.getString("ORGNAME");
String synonyms=rs.getString("SYNONYMS");
entityData.setSynonyms(synonyms);
entityData.setItemname(entityName);
entityData.setOperation(rs.getString("OPERATION"));
dataList.add(entityData);
previousTableName=tableName;
}
JsonArrayBuilder add=Json.createArrayBuilder();
JsonArrayBuilder delete=Json.createArrayBuilder();
JsonArrayBuilder update=Json.createArrayBuilder();
for(EntityDataNEW data: dataList)
{
switch(data.getOperation())
{
case "delete":
JsonObjectBuilder deleteObj=Json.createObjectBuilder();
JsonArrayBuilder deleteSynonyms=Json.createArrayBuilder();
deleteObj.add("canonicalName", data.getItemname());
deleteSynonyms.add(0,data.getSynonyms());
deleteObj.add("synonyms", data.getSynonyms());
deleteObj.add("synonyms", data.getSynonyms());
delete.add(deleteObj);
delete.add(deleteSynonyms);
break;
case "update":
JsonObjectBuilder updateObj=Json.createObjectBuilder();
JsonArrayBuilder modifySynonyms=Json.createArrayBuilder();
updateObj.add("canonicalName", data.getItemname());
modifySynonyms.add(0,data.getSynonyms());
updateObj.add("synonyms", data.getSynonyms());
update.add(updateObj);
update.add(modifySynonyms);
break;
case "add":
JsonObjectBuilder addObj=Json.createObjectBuilder();
JsonArrayBuilder addSynonyms=Json.createArrayBuilder();
addObj.add("canonicalName", data.getItemname());
addSynonyms.add(0,data.getSynonyms());
addObj.add("synonyms",addSynonyms);
add.add(addObj);
add.add(addSynonyms);
break;
default:
break;
}
rs.close();
connection.close();
}
JsonObjectBuilder mainObj= Json.createObjectBuilder();
mainObj.add("delete",delete);
mainObj.add("update", update);
mainObj.add("add",add);
String data = mainObj.build().toString();
System.out.println(data);
String filePath= ODAParams.ENTITY_FILE_PATH+"/"+dynamicEntityName+".json";
BufferedWriter out = new BufferedWriter(new FileWriter(filePath));
out.write(data);
out.close();
System.out.println("End of file writing code");
return filePath;
}
// I am putting this query here as not able to put in comment with format
SELECT DISTINCT DATA.* FROM DATA
INNER JOIN
(
SELECT TABLENAME FROM SAMPLE.Data GROUP BY TABLENAME
)X ON X.TABLENAME=DATA.TABLENAME;
如果您看到上面的代码,它正在应用查询GROUP BY
。
推荐阅读
- nuxt.js - NuxtJS 静态生成 date-fns "locale must contain localize property" + nuxt-i18n
- linux - 使用mingw从Linux交叉编译到Windows
- python - 将变量从 python 文件传递到 bash 脚本
- c++ - 在 C++ 中使用 gdb 进行内存转储时的内存泄漏
- java - 如何计算 ArrayList 中对象的数量?
- javascript - 双击显示/隐藏多个 div 双击不起作用
- windows - docker RUN 在 windows 上会发生什么?
- javascript - 反应电话输入 2 onlyCountries 道具不适用于数组
- html - 如何在打印或 PDF 页面视图中适合代码区域?
- texstudio - Texstudio 2.10.8 嵌入式查看器在 Build&view F5 后不显示