我知道它很愚蠢,但我们有巨大的遗留代码,期望ResultSet处理数据,但我们创建了另一个获取JSON格式数据的API。我正在将JSON对象转换为HashMap,并将HashMap对象传递给DataProcessing的遗留代码。由于遗留代码总是期望ResultSet我无法处理新数据。
答案 0 :(得分:4)
您需要创建Interface ResultSet
答案 1 :(得分:1)
执行此操作的唯一方法是将ResultSet子类化以创建另一个类,该类可以通过添加添加数据的方法来使用SQL查询结果以外的数据创建。
如果这对您来说太复杂或耗时,对我来说,您会发现别人已经写过并出版了。
我已经成功使用了Mockrunner:
这是我的实现方式:
使用静态方法创建一个类,以从标题列表和数据数组返回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());
}