如何以编程方式从没有数据库的自定义数据创建Java ResultSet

Chr*_*mer 28 java sql

我有一些现有的代码接受java.sql.ResultSet包含从Oracle数据库检索的信息的代码.我现在想重用这段代码,但是我想传递一个ResultSet对象,我是从一些与任何数据库无关的内存数据创建的.是否有可用于此的现有Java框架类? ResultSet有很多方法,所以实现我自己的类似乎有点矫枉过正,即使我可以忽略我的具体情况的大多数方法.

我正在考虑旧的Microsoft ADO记录集对象的内容,在那里我可以创建字段,然后填充每个字段的行数据.这看起来像是一个容易混淆的问题,但我一直无法找到任何好的指针.

Joe*_*tov 19

  • 创建自己的AbstractResultSet类,一个(像AbstractQueue)通过抛出UnsupportedOperationException来实现所有方法(Eclipse会在瞬间自动生成这些方法).
  • 现在扩展AbstractResultSet.子类只能覆盖您有兴趣实现的方法.


ska*_*man 12

这是一个稍微左侧的解决方案,但您可以使用模拟框架(例如JMock).这些框架通常用于创建单元测试接口的模拟实现,但我认为没有理由可以使用它来创建一个"部分实现" java.sql.ResultSet.

例如,假设您只想实现该getString()方法,而不是其他:

Mockery mockery = new Mockery();
final ResultSet resultSet = mockery.mock(ResultSet.class);

mockery.checking(new Expectations() {{
    allowing(resultSet).getString(1); will(returnValue("my first string"));
    allowing(resultSet).getString(2); will(returnValue("my second string"));
}});

// resultSet is now a java.sql.ResultSet object, which you can pass to your legacy code
resultSet.getString(1);
Run Code Online (Sandbox Code Playgroud)

相当不正统,相当繁琐,但它应该工作