【问题标题】:Converting a HashMap Object to ResultSet将 HashMap 对象转换为 ResultSet
【发布时间】:2016-12-22 23:50:47
【问题描述】:

我知道这样问很愚蠢,但我们有大量遗留代码需要 ResultSet 来处理数据,但我们创建了另一个 API 来获取 JSON 格式的数据。我正在将 JSON 对象转换为 HashMap 并将 HashMap 对象传递给 DataProcessing 的旧代码。由于遗留代码总是需要 ResultSet 我无法处理新数据。

【问题讨论】:

标签: java json hashmap resultset


【解决方案1】:

这样做的唯一方法是将 ResultSet 子类化以创建另一个类,该类可以通过添加添加数据的方法来使用 SQL 查询结果以外的数据创建。

如果这对您来说太复杂或太费时,就像对我一样,您可以找到其他人已经编写和发布的。

我已经成功使用了 Mockrunner:

http://mockrunner.github.io

我是这样实现的:

使用静态方法创建一个类,以从标题列表和数据数组中返回一个 ResultSet:

package com.mypackage;

import java.sql.ResultSet;
import java.util.List;

import com.mockrunner.mock.jdbc.MockResultSet;

public class OkResultSet {

public static ResultSet getResultSet(List<String> headers, List<List<Object>> data) throws Exception 
{
    if (headers == null || data == null) {
        throw new Exception("null parameters");
    }

    List<Object> firstList = data.get(0);

    if (headers.size() != firstList.size()) {
        throw new Exception("parameter sizes are not equal");
    }

    MockResultSet mockResultSet = new MockResultSet("okResultSet");

    for (String string : headers) {         
        mockResultSet.addColumn(string);
    }

    for (List<Object> list : data) {
        mockResultSet.addRow(list);
    }

    return mockResultSet;
    }
}

在我的代码中构造一个标题列表和一个数据数组,并调用新方法来创建一个 ResultSet,然后我可以将其传递给遗留代码:

List<String> headers = new ArrayList<String>();
headers.add("Question");
headers.add("ResponseType");
headers.add("ChecklistType");
headers.add("Required");

List<List<Object>> data = new ArrayList<List<Object>>();
for (int i = 0; i < questionArray.size(); i++) {
    JSONObject questionObject = (JSONObject)questionArray.get(i);
    String question = (String)questionObject.get("Question");
    String responseType = (String)questionObject.get("ResponseType");
    String checklistType = (String)questionObject.get("ChecklistType");
    String required = (String)questionObject.get("Required");

    List<Object> objects = new ArrayList<Object>();
    objects.add(question);
    objects.add(responseType);
    objects.add(checklistType);
    objects.add(required);
    data.add(objects);
}

ResultSet finalResultSet = null;
try {
    finalResultSet = OkResultSet.getResultSet(headers, data);
} catch (Exception e) {
    LOGGER.warn("parseJobsetForChecklistQuestions | error "+e.getMessage());
}

【讨论】:

    【解决方案2】:

    您需要创建Interface ResultSet 的自定义实现

    【讨论】:

      猜你喜欢
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2022-11-01
      • 2012-04-01
      相关资源
      最近更新 更多