1.1.1

Table Of Contents
// to access the current row of the cursor
// a result set needs to be obtained prior to using the
// WHERE CURRENT syntax
ResultSet rs = s3.executeQuery("select * from
FlightBookings FOR UPDATE of number_seats");
PreparedStatement ps2 = conn.prepareStatement(
"UPDATE FlightBookings SET number_seats = ? " +
"WHERE CURRENT OF UPDATABLESTATEMENT");
Typically, you do not assign a name to the cursor, but let the system generate one for you automatically. You
can determine the system-generated cursor name of a ResultSet generated by a SELECT statement using the
ResultSet class's getCursorName method.
PreparedStatement ps2 = conn.prepareStatement(
"UPDATE employee SET bonus = ? WHERE CURRENT OF "+
Updatable.getCursorName());
Extended Example of an Updatable Result Set
Connection conn =
DriverManager.getConnection("jdbc:sqlfire://myHostName:1527/");
conn.setAutoCommit(false);
// Create the statement with concurrency mode CONCUR_UPDATABLE
// to allow result sets to be updatable
Statement stmt =
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
// Updatable statements have some requirements
// for example, select must be on a single table
ResultSet uprs = stmt.executeQuery(
"SELECT FIRSTNME, LASTNAME, WORKDEPT, BONUS " +
"FROM EMPLOYEE FOR UPDATE of BONUS"); // Only bonus can
be updated
String theDept="E21";
while (uprs.next()) {
String firstnme = uprs.getString("FIRSTNME");
String lastName = uprs.getString("LASTNAME");
String workDept = uprs.getString("WORKDEPT");
BigDecimal bonus = uprs.getBigDecimal("BONUS");
if (workDept.equals(theDept)) {
// if the current row meets our criteria,
// update the updatable column in the row
uprs.updateBigDecimal("BONUS",
bonus.add(BigDecimal.valueOf(250L)));
uprs.updateRow();
System.out.println("Updating bonus for employee:" +
firstnme + lastName);
}
}
conn.commit(); // commit the transaction
// close object
uprs.close();
vFabric SQLFire User's Guide180
Developing Applications with SQLFire