我不确定这是否是一个相当愚蠢的问题。但是有可能手动将数据/值添加到Java结果集?例如,如果我已经有一个现有的填充ResultSet,有没有办法在它的顶部添加更多的数据?手动添加数据到Java结果集
//if this was possible for instance
ResultSet rs;
rs.setData("someValue");
谢谢!
我不确定这是否是一个相当愚蠢的问题。但是有可能手动将数据/值添加到Java结果集?例如,如果我已经有一个现有的填充ResultSet,有没有办法在它的顶部添加更多的数据?手动添加数据到Java结果集
//if this was possible for instance
ResultSet rs;
rs.setData("someValue");
谢谢!
你可以用任何JDBC ResultSet
您的自定义实现:
public class MyResultSet implements ResultSet {
// Delegate most implementations to the underlying database result set:
private final ResultSet delegate;
public MyResultSet(ResultSet delegate) {
this.delegate = delegate;
}
@Override
public int getInt(int index) throws SQLException {
return delegate.getInt(index);
}
// [... more delegate methods ...]
// Add custom methods
public void setData(Object someValue) { ... }
public Object getData() { ... }
}
您的自定义结果集的行为就像任何其他的结果集。从您的自定义结果集中读取数据的客户端代码将忽略您对“底层”执行的更改。换句话说,你可以假装,有些数据是可用的
public class MyResultSet implements ResultSet {
// [...]
@Override
public int getInt(int index) throws SQLException {
if (index == 3) {
return 42;
} else {
return delegate.getInt(index);
}
}
}
您可以将值添加到ResultSet
using insertRow()
但是这也会将数据添加到底层数据库。如果你想这样做你会做这样的事情:
rs.moveToInsertRow();
rs.updateString("someColumn", "someValue");
rs.insertRow();
如果你只是想在不修改数据库中的ResultSet
的数据添加到一个List
或Set
或类似的东西,并修改数据添加到结果那。
你需要创建一个将返回更新ResultSet
的声明。例如:
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE
);
ResultSet resultSet = stmt.executeQuery(" SELECT col1 FROM tablename ");
rs.absolute(5); // moves the cursor to the 5th row of rs
rs.updateString("col1", "NEW VALUE"); // updates the col1 column of row 5 to be NEW VALUE
rs.updateRow(); // updates the row in the data source