如何解决在Java中生成json文件代码正在运行需要一些修改帮助
我必须在Java中创建json文件。我在where子句中传递参数时可以创建json文件。我正在从Oracle数据库读取数据 以下是我的数据。
当我发送参数Select * from Data where tablename='ITEM'
时,我的代码创建的文件ITEM.json
与组织相同。
明天是今天,我不知道TABLENAME列中有多少个不同的表名。例如ITEM,ORG,FEATURE等
我可以在不传递参数的情况下通过读取数据在Java中创建文件吗?表示在上述数据的情况下应该有2个文件。 ITEM.json和ORG.json。我不想在查询中使用where clause
。我的程序应该基于表中的数据创建文件。
我想要以下格式的数据。 ITEM.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",{"canonicalName":"TCS"}]}
我的以下代码正常运行,但是当我传递参数where TABLENAME='ITEM'
时可以正常工作。我希望我的代码读取表数据并根据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());
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,例如表名是 ORG
,而不是表名 orgEntityList
(如果表名是 { {1}} ,然后 ITEM
。
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());
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;
进行查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。