【问题标题】:Reading data from oracle database table and writing to file using java从oracle数据库表中读取数据并使用java写入文件
【发布时间】:2020-07-23 21:34:16
【问题描述】:

我正在使用 JDBC 从数据库中读取数据。数据如下。

我必须使用 Post API 将此数据插入到应用程序中。为此,我需要以 API 接受的格式将数据写入文件。

所以我将创建以下格式的OrgName.json 文件。

{
    "delete": [
        {
            "canonicalName": "TCS"          
        }
    ],
    "update": [
         {
            "canonicalName": "Wipro tech"
            "synonyms": [
                "Wipro technology"
            ]
         },
         {
            "canonicalName": "Infosys"
            "synonyms": [
                "Infosys tech"
            ]
         }
    ]       
    "add": [
        {
            "canonicalName": "Apple Computers",
            "synonyms": [
                "Apple"
            ]
        },
        {
            "canonicalName": "Google India",
            "synonyms": ["Google"]
        }
    ]
}

所以会有 3 个分组。所有update 值都将出现在update 标记中,add 值在基于 OPERATION 列的add 标记中,deletedelete 标记中。 ORGNAMEcolumn 的值将是 canonicalNamefile 中的名称。如果synonymsnull,那么它将不存在,否则它将存在。

我知道 java 中的 JDBC。我可以使用PreparedstatementexecuteQuery 读取数据,并且可以使用sysout 在控制台中显示。但我无法以上述格式将数据写入文件。

有人可以帮我吗?我是数据库开发人员,所以无法思考我该怎么做。即使是最小的帮助对我来说也是很大的。

我想将Resultset 转换为上述文件,但我无法做到。

【问题讨论】:

  • 这能回答你的问题吗? Write a json file in java
  • @PhilipWrage 谢谢。菲利普请不要将每个问题都标记为重复。要求不同,我很挣扎。

标签: java spring hibernate jdbc spring-data


【解决方案1】:

由于您在数据库中拥有信息,因此分离任务很重要。

  1. 获取信息。完成
  2. 将数据库中的信息转换为对象
  3. 单独删除、添加、更新对象
  4. 打印分离的对象。

任务 1 已完成,您可以访问和检索数据。

对于任务 2,您需要创建 Data.java 类,并将属性 orgName、同义词和操作作为字符串类型。 *包括getter和setter。

您需要将此类视为表的一个寄存器。 然后你需要以某种方式生成一个 Data.java 列表来“复制”该表。

这可以这样完成:

List<Data> dataList = new ArrayList<>();
//Your database code
ResultSet rs = pstmt.executeQuery();
while (rs.next) {
            Data data = new Data();
            data.setOrgName(rs.getString("OrgName"));
            data.setSynonyms(rs.getString("Synonyms"));
            data.setOperation(rs.getString("Operation"));

            dataList.add(data);
        }

您现在可以将该 dataList 打印为对象。

接下来的两个步骤可以一起完成。 对于 dataList (foreach) 中的每个对象,您可以开始生成 OrgName.json 文件。分组删除、添加和修改很重要。

这可以这样完成:

    JSONObject obj = new JSONObject();
    JSONArray delete = new JSONArray();
    JSONArray modify = new JSONArray();
    JSONArray add = new JSONArray();
    for (Data data : dataList) {

        switch (data.getOperation()){
            case "delete":
                //This means that its is a delete object
                JSONObject obj = new JSONObject();
                obj.put("canonicalName", data.getOrgName());
                delete.add(obj);
                break;
            case "add":
                //This means that its is an add object
                // similar to delete
                break;
            case "modify":
                //This means that its is a modify object
                //Similar to delete
            default:
                break;
        }
    }

之后就可以使用 FileWriter 生成文件了。

查看此链接:write JSON object to fileexecute query and iterate RS

【讨论】:

  • 谢谢@luisfa。它真的很棒...让我尝试修改一下。
【解决方案2】:

Jackson 是一个非常有用的处理 JSON 的库。

根据您问题中的示例 JSON,您可以创建简单的 POJO 来对 JSON 结构进行建模,然后利用 Jackson 的 ObjectMapper 将 POJO 映射到包含您要写入的 JSON 的 String File.

下面是一个非常简单的示例,但您必须更新此示例以适当地处理数据隐藏和错误处理。

class OrganizationModificationsDto {

    public List<Organization> delete;
    public List<Organization> update;
    public List<Organization> add;

    public static String toJson( OrganizationModificationsDto dto ) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString( dto );
    }

}

class Organization {
    public String canonicalName;
    public List<String> synonyms;
}

ObjectMapper 也有一个 writeValue 方法,可以让您将 JSON 直接写入 FileWriterOutputStream 等。

public void writeValue(File resultFile, Object value)

因此,一旦你建立了OrganizationModificationsDto,你就可以直接将 JSON 作为 JSON 写入文件。

objectMapper.writeValue( new File("OrgName.json"), dto );

这是一个有用的tutorial

【讨论】:

  • 谢谢菲利普。有没有办法以那种格式写入数据?
  • ObjectMapper 也有一个writeValue 方法,允许您直接写入FileOutputStreamWriter 等。
  • 我可以在文件中写入数据。我想知道逻辑。
  • @ShwetaMishra 我不确定你所说的逻辑是什么意思。您说您知道如何从数据库中获取数据,所以我假设您知道如何将其转换为其他 Java 对象,并且只需要 JSON 转换方面的帮助。您将遍历您的ResultSet 并构建Organization 对象列表,以便在OrganizationModificationsDto 中进行添加、删除、更新操作。然后将 DTO 转换为 JSON 并将其写入File
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多