2012-03-23 92 views
1

我不确定这是否是一个相当愚蠢的问题。但是有可能手动将数据/值添加到Java结果集?例如,如果我已经有一个现有的填充ResultSet,有没有办法在它的顶部添加更多的数据?手动添加数据到Java结果集

//if this was possible for instance 
ResultSet rs; 
rs.setData("someValue"); 

谢谢!

回答

4

你可以用任何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); 
    } 
    } 
} 
3

您可以将值添加到ResultSetusing insertRow()但是这也会将数据添加到底层数据库。如果你想这样做你会做这样的事情:

rs.moveToInsertRow(); 
rs.updateString("someColumn", "someValue"); 
rs.insertRow(); 

如果你只是想在不修改数据库中的ResultSet的数据添加到一个ListSet或类似的东西,并修改数据添加到结果那。

0

你需要创建一个将返回更新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