@Override
 public void updateDouble(int columnIndex, double x) throws SQLException {
   try {
     _res.updateDouble(columnIndex, x);
   } catch (SQLException e) {
     handleException(e);
   }
 }
 @Override
 public void updateDouble(String columnName, double x) throws SQLException {
   try {
     _res.updateDouble(columnName, x);
   } catch (SQLException e) {
     handleException(e);
   }
 }
  public void saveUserStats(
      String username,
      double x,
      double y,
      int level,
      int experience,
      int gold,
      int hp,
      int maxhp,
      int mp,
      int maxmp,
      int strength,
      int intellect,
      int agility,
      int dexterity,
      int vitality,
      int luck,
      String image,
      int region)
      throws DatabaseException, SQLException {
    Transaction trans = new JDBCTransaction(createConnection());
    Connection connection = ((JDBCTransaction) trans).getConnection();
    Statement stmt =
        connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    String query = "SELECT * FROM users WHERE username like '" + username + "'";
    ResultSet result = stmt.executeQuery(query); // executeQuery(query);

    if (result.next()) {
      result.updateDouble("x", x);
      result.updateDouble("y", y);
      //  	result.updateString("race", race);
      //  	result.updateString("class", Class);
      //  	result.updateString("privs", privs);
      //  	result.updateString("status", status);
      result.updateInt("level", level);
      result.updateInt("experience", experience);
      result.updateInt("gold", gold);
      result.updateInt("hp", hp);
      result.updateInt("maxhp", maxhp);
      result.updateInt("mp", mp);
      result.updateInt("maxmp", maxmp);
      result.updateInt("strength", strength);
      result.updateInt("intellect", intellect);
      result.updateInt("agility", agility);
      result.updateInt("dexterity", dexterity);
      result.updateInt("vitality", vitality);
      result.updateInt("luck", luck);
      result.updateString("image", image);
      result.updateInt("region", region);
      result.updateRow();
    }
  }
  /**
   * Tests calling updateDouble on all columns of the row.
   *
   * @exception SQLException database access error. Causes test to fail with an error.
   */
  public void testUpdateDouble() throws SQLException {
    Statement s = createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = s.executeQuery(SELECT_STMT);

    rs.next();

    for (int i = 1; i <= COLUMNS; i++) {
      rs.updateDouble(i, 2.0);
      assertEquals(
          "Expected rs.getDouble(" + i + ") to match updated value", 2, (int) rs.getDouble(i));
    }
    rs.updateRow();
    rs.close();
    checkColumnsAreUpdated();

    s.close();
  }
	public void updateDouble(String columnName, double x) throws SQLException {
		rs.updateDouble(columnName, x);
	}
	public void updateDouble(int columnIndex, double x) throws SQLException {
		rs.updateDouble(columnIndex, x);
	}
  private void testUpdateDataType() throws Exception {
    Connection conn = getConnection();
    Statement stat = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
    stat.execute(
        "CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255), "
            + "DEC DECIMAL(10,2), BOO BIT, BYE TINYINT, BIN BINARY(100), "
            + "D DATE, T TIME, TS TIMESTAMP, DB DOUBLE, R REAL, L BIGINT, "
            + "O_I INT, SH SMALLINT, CL CLOB, BL BLOB)");
    ResultSet rs = stat.executeQuery("SELECT * FROM TEST");
    ResultSetMetaData meta = rs.getMetaData();
    assertEquals("java.lang.Integer", meta.getColumnClassName(1));
    assertEquals("java.lang.String", meta.getColumnClassName(2));
    assertEquals("java.math.BigDecimal", meta.getColumnClassName(3));
    assertEquals("java.lang.Boolean", meta.getColumnClassName(4));
    assertEquals("java.lang.Byte", meta.getColumnClassName(5));
    assertEquals("[B", meta.getColumnClassName(6));
    assertEquals("java.sql.Date", meta.getColumnClassName(7));
    assertEquals("java.sql.Time", meta.getColumnClassName(8));
    assertEquals("java.sql.Timestamp", meta.getColumnClassName(9));
    assertEquals("java.lang.Double", meta.getColumnClassName(10));
    assertEquals("java.lang.Float", meta.getColumnClassName(11));
    assertEquals("java.lang.Long", meta.getColumnClassName(12));
    assertEquals("java.lang.Integer", meta.getColumnClassName(13));
    assertEquals("java.lang.Short", meta.getColumnClassName(14));
    assertEquals("java.sql.Clob", meta.getColumnClassName(15));
    assertEquals("java.sql.Blob", meta.getColumnClassName(16));
    rs.moveToInsertRow();
    rs.updateInt(1, 0);
    rs.updateNull(2);
    rs.updateNull("DEC");
    // 'not set' values are set to null
    assertThrows(ErrorCode.NO_DATA_AVAILABLE, rs).cancelRowUpdates();
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt(1, 1);
    rs.updateString(2, null);
    rs.updateBigDecimal(3, null);
    rs.updateBoolean(4, false);
    rs.updateByte(5, (byte) 0);
    rs.updateBytes(6, null);
    rs.updateDate(7, null);
    rs.updateTime(8, null);
    rs.updateTimestamp(9, null);
    rs.updateDouble(10, 0.0);
    rs.updateFloat(11, (float) 0.0);
    rs.updateLong(12, 0L);
    rs.updateObject(13, null);
    rs.updateShort(14, (short) 0);
    rs.updateCharacterStream(15, new StringReader("test"), 0);
    rs.updateBinaryStream(16, new ByteArrayInputStream(new byte[] {(byte) 0xff, 0x00}), 0);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 2);
    rs.updateString("NAME", "+");
    rs.updateBigDecimal("DEC", new BigDecimal("1.2"));
    rs.updateBoolean("BOO", true);
    rs.updateByte("BYE", (byte) 0xff);
    rs.updateBytes("BIN", new byte[] {0x00, (byte) 0xff});
    rs.updateDate("D", Date.valueOf("2005-09-21"));
    rs.updateTime("T", Time.valueOf("21:46:28"));
    rs.updateTimestamp("TS", Timestamp.valueOf("2005-09-21 21:47:09.567890123"));
    rs.updateDouble("DB", 1.725);
    rs.updateFloat("R", (float) 2.5);
    rs.updateLong("L", Long.MAX_VALUE);
    rs.updateObject("O_I", 10);
    rs.updateShort("SH", Short.MIN_VALUE);
    // auml, ouml, uuml
    rs.updateCharacterStream("CL", new StringReader("\u00ef\u00f6\u00fc"), 0);
    rs.updateBinaryStream("BL", new ByteArrayInputStream(new byte[] {(byte) 0xab, 0x12}), 0);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 3);
    rs.updateCharacterStream("CL", new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBinaryStream("BL", new ByteArrayInputStream(new byte[] {(byte) 0xab, 0x12}));
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 4);
    rs.updateCharacterStream(15, new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBinaryStream(16, new ByteArrayInputStream(new byte[] {(byte) 0xab, 0x12}));
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 5);
    rs.updateClob("CL", new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBlob("BL", new ByteArrayInputStream(new byte[] {(byte) 0xab, 0x12}));
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 6);
    rs.updateClob(15, new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBlob(16, new ByteArrayInputStream(new byte[] {(byte) 0xab, 0x12}));
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 7);
    rs.updateNClob("CL", new StringReader("\u00ef\u00f6\u00fc"));
    Blob b = conn.createBlob();
    OutputStream out = b.setBinaryStream(1);
    out.write(new byte[] {(byte) 0xab, 0x12});
    out.close();
    rs.updateBlob("BL", b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 8);
    rs.updateNClob(15, new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBlob(16, b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 9);
    rs.updateNClob("CL", new StringReader("\u00ef\u00f6\u00fc"), -1);
    rs.updateBlob("BL", b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 10);
    rs.updateNClob(15, new StringReader("\u00ef\u00f6\u00fc"), -1);
    rs.updateBlob(16, b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 11);
    rs.updateNCharacterStream("CL", new StringReader("\u00ef\u00f6\u00fc"), -1);
    rs.updateBlob("BL", b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 12);
    rs.updateNCharacterStream(15, new StringReader("\u00ef\u00f6\u00fc"), -1);
    rs.updateBlob(16, b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 13);
    rs.updateNCharacterStream("CL", new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBlob("BL", b);
    rs.insertRow();

    rs.moveToInsertRow();
    rs.updateInt("ID", 14);
    rs.updateNCharacterStream(15, new StringReader("\u00ef\u00f6\u00fc"));
    rs.updateBlob(16, b);
    rs.insertRow();

    rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID NULLS FIRST");
    rs.next();
    assertTrue(rs.getInt(1) == 0);
    assertTrue(rs.getString(2) == null && rs.wasNull());
    assertTrue(rs.getBigDecimal(3) == null && rs.wasNull());
    assertTrue(!rs.getBoolean(4) && rs.wasNull());
    assertTrue(rs.getByte(5) == 0 && rs.wasNull());
    assertTrue(rs.getBytes(6) == null && rs.wasNull());
    assertTrue(rs.getDate(7) == null && rs.wasNull());
    assertTrue(rs.getTime(8) == null && rs.wasNull());
    assertTrue(rs.getTimestamp(9) == null && rs.wasNull());
    assertTrue(rs.getDouble(10) == 0.0 && rs.wasNull());
    assertTrue(rs.getFloat(11) == 0.0 && rs.wasNull());
    assertTrue(rs.getLong(12) == 0 && rs.wasNull());
    assertTrue(rs.getObject(13) == null && rs.wasNull());
    assertTrue(rs.getShort(14) == 0 && rs.wasNull());
    assertTrue(rs.getCharacterStream(15) == null && rs.wasNull());
    assertTrue(rs.getBinaryStream(16) == null && rs.wasNull());

    rs.next();
    assertTrue(rs.getInt(1) == 1);
    assertTrue(rs.getString(2) == null && rs.wasNull());
    assertTrue(rs.getBigDecimal(3) == null && rs.wasNull());
    assertTrue(!rs.getBoolean(4) && !rs.wasNull());
    assertTrue(rs.getByte(5) == 0 && !rs.wasNull());
    assertTrue(rs.getBytes(6) == null && rs.wasNull());
    assertTrue(rs.getDate(7) == null && rs.wasNull());
    assertTrue(rs.getTime(8) == null && rs.wasNull());
    assertTrue(rs.getTimestamp(9) == null && rs.wasNull());
    assertTrue(rs.getDouble(10) == 0.0 && !rs.wasNull());
    assertTrue(rs.getFloat(11) == 0.0 && !rs.wasNull());
    assertTrue(rs.getLong(12) == 0 && !rs.wasNull());
    assertTrue(rs.getObject(13) == null && rs.wasNull());
    assertTrue(rs.getShort(14) == 0 && !rs.wasNull());
    assertEquals("test", rs.getString(15));
    assertEquals(new byte[] {(byte) 0xff, 0x00}, rs.getBytes(16));

    rs.next();
    assertTrue(rs.getInt(1) == 2);
    assertEquals("+", rs.getString(2));
    assertEquals("1.20", rs.getBigDecimal(3).toString());
    assertTrue(rs.getBoolean(4));
    assertTrue((rs.getByte(5) & 0xff) == 0xff);
    assertEquals(new byte[] {0x00, (byte) 0xff}, rs.getBytes(6));
    assertEquals("2005-09-21", rs.getDate(7).toString());
    assertEquals("21:46:28", rs.getTime(8).toString());
    assertEquals("2005-09-21 21:47:09.567890123", rs.getTimestamp(9).toString());
    assertTrue(rs.getDouble(10) == 1.725);
    assertTrue(rs.getFloat(11) == (float) 2.5);
    assertTrue(rs.getLong(12) == Long.MAX_VALUE);
    assertEquals(10, ((Integer) rs.getObject(13)).intValue());
    assertTrue(rs.getShort(14) == Short.MIN_VALUE);
    // auml ouml uuml
    assertEquals("\u00ef\u00f6\u00fc", rs.getString(15));
    assertEquals(new byte[] {(byte) 0xab, 0x12}, rs.getBytes(16));

    for (int i = 3; i <= 14; i++) {
      rs.next();
      assertEquals(i, rs.getInt(1));
      assertEquals("\u00ef\u00f6\u00fc", rs.getString(15));
      assertEquals(new byte[] {(byte) 0xab, 0x12}, rs.getBytes(16));
    }
    assertFalse(rs.next());

    stat.execute("DROP TABLE TEST");
    conn.close();
  }