JavaでSQL、特にSELECT文を発行してResultSetをFlashに引渡し、DataSetのDataProviderにセットするとFlash上で活用できる。
それはいいいのだが、java.sql.ConnectionがCloseできない。CloseするとResultSetもクローズされてしまう。
解決策としてOpenAMFのASRecordSetクラスのpopulateメソッドを使う。このメソッドはjava.sql.ResultSetを引数として実行することでReslutSetがCloseされても問題なくASRecordSetオブジェクトがFlash側で処理される。
処理としてはこんな感じ(一部省略)
import org.openamf.recordset.ASRecordSet;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public ASRecordSet getAllData() throws IOException {
ASRecordSet recordSet = new ASRecordSet();
ResultSet rs = null;
Statement stmt = null;
Connection con = null;
String sql = "SELECT * FROM table";
try {
con = _ds.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
recordSet.populate(rs);
}
catch(SQLException e) {
throw new DataAccessException();
}
finally {
close(rs);
close(stmt);
close(con);
}
return recordSet;
}