2012-03-23 8 views
1

これはむしろばかげた質問かもしれません。しかし、手動でデータ/値をJavaの結果セットに追加することは可能ですか?たとえば、すでにデータセットされているResultSetがある場合、その上にデータを追加する方法はありますか?Java ResultSetに手動でデータを追加する

//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()が、これに値を追加することができます。あなただけのデータベースがResultSetからListまたはSetまたは類似のものにデータを追加し、修正変更することなく、結果にデータを追加したい場合は

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

:あなたはこれをやってみたかった場合はあなたのような何かをしたいですそれ。

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 
関連する問題