9.7 Inserción (insert)

Para insertar nuevos registros necesitaremos utilizar, al menos, estos dos métodos:

  • void moveToInsertRow(): desplaza el cursor al registro de inserción. Es un registro especial utilizado para insertar nuevos registros en el ResultSet. Posteriormente tendremos que llamar a los métodos updateXXX() ya conocidos para establecer los valores del registro de inserción. Para finalizar hay que llamar a insertRow().
  • void insertRow(): inserta el registro de inserción en el ResultSet, pasando a ser un registro normal más, y también lo inserta en la base de datos.

El siguiente código inserta un nuevo registro en la tabla clientes. Supondremos que con es un objeto Connection previamente creado:

// Creamos un Statement scrollable y modificable
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

// Ejecutamos un SELECT y obtenemos la tabla clientes en un ResultSet
String sql = "SELECT * FROM estudiantes";
ResultSet rs = st.executeQuery(sql);

// Creamos un nuevo registro y lo insertamos
rs.moveToInsertRow();
rs.updateString(2,"Sandra");
rs.updateDouble(3,"7.5");
rs.insertRow();

Los campos cuyo valor no se haya establecido con updateXXX() tendrán un valor NULL. Si en la base de datos dicho campo no está configurado para admitir nulos se producirá una SQLException.

Tras insertar nuestro nuevo registro en el objeto ResultSet podremos volver a la anterior posición en la que se encontraba el cursor (antes de invocar moveToInsertRow() ) llamando al método moveToCurrentRow(). Este método sólo se puede utilizar en combinación con moveToInsertRow().

Ejemplo 1
public void insertUser(){ 
    Statement st = null; 
    String sql = "INSERT INTO estudiantes (nombre, promedio) VALUES ('Luís', 6.8)";
    try { 
        st = con.createStatement(); 
        st.executeUpdate(sql); 

    } catch (SQLException e)) {
        System.out.println("ERROR al insertar el usuario: " + e.getMessage()); 

    } finally { 
        try{ 
            //Siempre se debe cerrar todo lo abierta 
            if (st != null) {
                st.close(); 
            }
        } catch(java.sql.SQLException ex){ 
            System.out.println("ERROR: " + e.getMessage());
        }
    }
}
Ejemplo 2: método pasándole nombre y contraseña
public void insertUsusario(String nombre, String contraseña){ 
    Statement st = null; 
    String sql = "INSERT INTO usuarios (nombre, contraseña) VALUES ('" + nombre + "', '" + contraseña + "')";
    try { 
        st = con.createStatement(); 
        st.executeUpdate(sql);

    } catch (SQLException e)) {
        System.out.println("ERROR al insertar el usuario: " + e.getMessage()); 

    } finally { 
        try{ 
            //Siempre se debe cerrar todo lo abierta 
            if (st != null) {
                st.close(); 
            }
        } catch(java.sql.SQLException ex){ 
            System.out.println("ERROR: " + e.getMessage());
        }
    }
}