从 oracle 数据库读取数据 table 并使用 java 写入文件

Reading data from oracle database table and writing to file using java

我正在使用 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 值会出现在 add 标签中,基于 OPERATION 列,delete 会出现在 delete 标签中。 ORGNAME column 的值将是 canonicalName file 中的名称。如果 synonymsnull 那么它不会存在,否则它会存在。

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

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

我想将 Resultset 转换成上面的文件,但我做不到。

Jackson 是一个非常有用的库,用于处理 JSON.

根据您问题中的示例 JSON,您可以创建简单的 POJO 来模拟 JSON 结构,然后利用 Jackson 的 ObjectMapper 将 POJO 映射到String 包含您要写入的 JSON 到 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 写入文件。

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

这里有一个有用的 tutorial

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

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

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

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

您需要将此 class 视为 Table 的一个寄存器。 然后你需要以某种方式生成 Data.java 到 'replicate' 的列表 table.

可以这样做:

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生成文件了。

看看这个link:write JSON object to file and execute query and iterate RS