【问题标题】:Generating json file in java. Code is working. Some modification help required在java中生成json文件。代码正在运行。需要一些修改帮助
【发布时间】:2020-08-23 16:28:12
【问题描述】:

我必须在 java 中创建 json 文件。当我在 where 子句中传递参数时,我可以创建 json 文件。我正在从 Oracle 数据库中读取数据 以下是我的数据。

当我发送参数 Select * from Data where tablename='ITEM' 时,我的代码为 org 创建了文件 ITEM.json

情况是明天我不知道 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"}]}

我下面的代码工作正常,但是当我为 ORG 传递参数 where TABLENAME='ITEM' .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

【问题讨论】:

  • 当要求基于TABLENAME进行分类时。为什么不使用Group By 表达式?
  • 数据也可以通过表达式分组吗?
  • 它只会给出不同的表名,是否也可以给出数据?你能建议修改上面的代码吗?
  • 在你过去两天关于这个问题的第二个问题中(我相信你到目前为止至少有四个问题),我向你展示了如何获得每个唯一 TABLENAME 的输出一行,对应的 JSON 文档(对于那个TABLENAME)在第二列。从这个结果来看,使用几乎任何工具生成实际的文本文件都是微不足道的。为什么要走参数化查询路线?
  • @mathguy 非常感谢 mathguy 的帮助。实际上我无法在 java 中返回该数据。我必须使用 jersey 客户端将该数据注入 API。

标签: java spring spring-boot jdbc logic


【解决方案1】:

使用这个SELECT * from Data GROUP BY tablename,可以通过表名获取记录组。

现在根据表名你需要创建 entityList 就像如果表名是 ORG 而不是 orgEntityList 如果名称是 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());
                    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 的查询。

【讨论】:

  • 谢谢你,Sagar,我正在经历同样的事情。
  • @Shruti ,太棒了..!!
  • 此代码无法运行 Sagar。此查询本身将不起作用。如果我在选择查询中使用列名,那么我将不会获取所有列的数据,“select * from dynamicentitygtt GROUP BY entity_type
  • 谢谢@Sagar。我有变焦。如果您能提供帮助,我很乐意联系。
猜你喜欢
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多