首页 > 解决方案 > 在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

标签: javaspringspring-bootjdbclogic

解决方案


使用它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


推荐阅读