title: How to optimize this update SQL query
body: <p>I have this Java method which I will use to insert data from JSF form into Oracle:</p>
  
  <pre><code>public int saveData(int result) throws SQLException, java.text.ParseException, NoSuchAlgorithmException {
  
          String SqlStatement = null;
  
          if (ds == null) {
              throw new SQLException();
          }
  
          Connection conn = ds.getConnection();
          if (conn == null) {
              throw new SQLException();
          }
  
          PreparedStatement ps = null;
  
          /*
  
          CREATE TABLE USERS(
              USERID INTEGER NOT NULL,
              GROUPID INTEGER,
              SPECIALNUMBER VARCHAR2(60 ),
              USERNAME VARCHAR2(50 ),
              PASSWD VARCHAR2(50 ),
              DATETOCHANGEPASSWD DATE,
              ADDRESS VARCHAR2(60 ),
              STATEREGION VARCHAR2(50 ),
              COUNTRY VARCHAR2(50 ),
              USERSTATUS VARCHAR2(30 ),
              TELEPHONE VARCHAR2(50 ),
              DATEUSERADDED DATE,
              USEREXPIREDATE DATE,
              DATEUSERLOCKED CHAR(20 ),
              CITY VARCHAR2(50 ),
              EMAIL VARCHAR2(50 ),
              DESCRIPTION CLOB
          )
          /
          */
  
          try {
              conn.setAutoCommit(false);
              boolean committed = false;
              try {           /* insert into Oracle the default system(Linux) time */
          InsertSqlStatement = "INSERT INTO USERS"
                          + " (USERID, GROUPID, SPECIALNUMBER, USERNAME, PASSWD, DATETOCHANGEPASSWD,"
                          + " ADDRESS, STATEREGION, COUNTRY, USERSTATUS, TELEPHONE, DATEUSERADDED," 
                          + " USEREXPIREDATE, DATEUSERLOCKED, CITY, EMAIL, DESCRIPTION)"
                          + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  
          UpdateSqlStatement = "UPDATE USERS "
                                  + "SET "
                                      + "USERID = ?, "
                                      + "GROUPID = ?, "
                                      + "SPECIALNUMBER = ?, "
                                      + "USERNAME = ?, "
                                      + "PASSWD = ?, "
                                      + "DATETOCHANGEPASSWD = ?, "
                                      + "ADDRESS = ?, "
                                      + "STATEREGION = ?, "
                                      + "COUNTRY = ?, "
                                      + "USERSTATUS = ?, "
                                      + "TELEPHONE = ?, "
                                      + "DATEUSERADDED = ?, "
                                      + "USEREXPIREDATE = ?, "
                                      + "DATEUSERLOCKED = ?, "
                                      + "CITY = ?, "
                                      + "EMAIL = ?, "
                                      + "DESCRIPTION = ? "
                          + "WHERE USERID = " + id;
  
                  ps = conn.prepareStatement(SqlStatement);
  
                  ps.setString(1, settingsMap.get("USERID"));
                  ps.setString(2, settingsMap.get("GROUPID"));
                  ps.setString(3, settingsMap.get("SPECIALNUMBER"));
                  ps.setString(4, settingsMap.get("USERNAME"));
                  ps.setString(5, passwdConvert(settingsMap.get("PASSWD")));
                  ps.setDate(6, toDate(settingsMap.get("DATETOCHANGEPASSWD")));
                  ps.setString(7, settingsMap.get("ADDRESS"));
                  ps.setString(8, settingsMap.get("STATEREGION"));
                  ps.setString(9, settingsMap.get("COUNTRY"));
                  ps.setString(10, settingsMap.get("USERSTATUS"));
                  ps.setString(11, settingsMap.get("TELEPHONE"));
                  ps.setDate(12, toDate(settingsMap.get("DATEUSERADDED")));
                  ps.setDate(13, toDate(settingsMap.get("USEREXPIREDATE")));
                  ps.setDate(14, toDate(settingsMap.get("DATEUSERLOCKED")));
                  ps.setString(15, settingsMap.get("CITY"));
                  ps.setString(16, settingsMap.get("EMAIL"));
                  ps.setString(17, settingsMap.get("DESCRIPTION"));
  
                  ps.executeUpdate();
  
                  conn.commit();
                  committed = true;
              }
              finally 
              {
                  if (!committed) {
                      conn.rollback();
                  }
              }
          } finally {
              /* Release the resources */
              ps.close();
              conn.close();
          }
          return result;
      }
  </code></pre>
  
  <p>Right now I cannot test the SQL query. Can you tell me is it valid and how I can optimize the SQL query for performance?</p>