feed twitter facebook LinkedIn facebook

Java » Insertar datos con JDBC

junio 7, 2007 por Víctor Cuervo 28 Comentarios Imprimir Imprimir

Tenemos varias formas de hacer un insert contra una base de datos mediante JDBC. Pero la más sencilla de todas es ejecutar una sentencia INSERT de SQL.

Es por ello que lo primero que vamos a ver es la estructura de dicha sentencia:

INSERT INTO tabla (campo1, campo2,... campoN)
   VALUES (valor1, valor2,... valorN)

Donde campo(s) son los nombres de las columnas de la tabla en los cuales queremos insertar valores. Si queremos rellenar todos los datos de las columnas no hace falta en poner estos campos. Los valores serán, en riguroso orden, los que correspondan con las columnas de las tabla.

En el ejemplo vamos a utilizar la tabla de libros. La cual pasamos a detallar un poco más:

LIBROS
  isbn: char(13)
  idAutor: int(10)
  categoría: varchar(45)
  titulo: varchar(50)
  descripción: text

Veamos los pasos que habría que dar para ejecutar el INSERT mediante una conexión JDBC.

Lo primero es realizar la conexión sobre la base de datos. Para ello necesitamos conocer la URL y los drivers de la base de datos. En nuestro caso, que nos apoyamos en MySQL, sería algo como lo que sigue:

// Definimos el driver y la url
String sDriver = "com.mysql.jdbc.Driver";
String sURL = "jdbc:mysql://localhost:3306/lineadecodigo";

Con los drivers y la URL simplemente tendremos que obtener la conexión (clase Connection) mediante usuario y password.

Connection con = null;
Class.forName(sDriver).newInstance(); 
con = DriverManager.getConnection(sURL,"root","password");

Una vez obtenida la conexión, pasaremos a preparar la sentencia INSERT mediante un PreparedStatement

stmt = con.prepareStatement("INSERT INTO libros VALUES (?,?,?,?,?)");

Una cosa muy importante es que al montar la sentencia INSERT no definimos los valores de la sentencia. En su lugar ponemos interrogaciones (?) que serán sustituidas posteriormente por valores.

Esto se hace para que la sentencia INSERT pueda ser reutilizada con diferentes valores y ser cacheada por los diferentes puntos (cache de conexión de los drivers, cache de la base de datos,…).

Para rellenar los valores simplemente nos podemos valer de los métodos setXXX sobre el PreparedStatement. El valor de XXX dependerá del tipo de dato que manejemos: setString, setDate, setInt,…

Veamos como lo asignaríamos en nuestro ejemplo:

String sISBN = "84-9815-212-7";
String sTitulo = "Yo, Claudio";
String sDescripcion= "Supuesta autobiografía de Claudio...";
String sCategoria = "novela histórica";
int idAutor = 3;
   
stmt.setString(1,sISBN);
stmt.setInt(2,idAutor);
stmt.setString(3,sTitulo);
stmt.setString(4,sDescripcion);
stmt.setString(5,sCategoria);

Ya solo nos quedará ejecutar la sentencia. Cuando la sentencia a ejecutar no devuelve un conjunto de resultados no deberemos de usar executeQuery(), sino que deberemos de utilizar executeUpdate(). Esto es aplicable a INSERT, UPDATE y DELETE.

stmt.executeUpdate();

El valor devuelto por esta sentencia es 1 para sentencias INSERT, UPDATE y DELETE y 0 para sentencias SQL que no devuelven nada.

Al final de nuestro programa no se nos puede olvidar en cerrar las conexiones de la base de datos ;-)

Pero, ¿qué sucede si el valor a insertar (en su clave) ya existe en la base de datos? Pues que nos saltará una sentencia SQLException. En dicha excepción podemos recuperar el SQLState y el SQLErrorCode, los cuales darán información del error.

Visualizar el ejemplo | Descargar el código

tags: ,

Artículos relacionados:

28 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2 3
  1. gisella
    junio 12, 2007 #

    muy execelente los codigos pro me gustaria que si me pudieran alguna opinion acerca de capas en visual.net

  2. mary
    septiembre 13, 2007 #

    por fa podrian realizar esto pero para una seleccion atravez del jdbc no se si este select puede estar dentro de una funcion y luego utilizar el setinterval.

  3. lineadecodigo
    septiembre 14, 2007 #

    Mary, échale un vistazo a Consultas SQL con parametros en Java JDBC y Conectarnos a una base de datos con JDBC. A ver si te son de ayuda.

  4. lalo
    junio 24, 2009 #

    me parese exelente
    solo que me gustaria saber de que tipo es la variable stmt
    GRACIAS!!

  5. lineadecodigo
    junio 29, 2009 #

    @lalo,

    La variable stmt es del tipo PreparedStatement. Del paquete java.sql.

  6. luis gabriel
    julio 2, 2009 #

    nesecito insertar a mi base de datos oracle 5 campos desde cajas de inputtext en netbeans6.5.1..

  7. diana
    agosto 13, 2009 #

    ola!!! tengo un problema intento insertar con un codigo similar de java a una base de datos en oracle pero al ejecutar el programa este no inserta se queda corriendo sin hacer nada alguien me podria ayudar

  8. diana
    agosto 13, 2009 #

    P.D. utilizo netbeans 6.5

  9. lineadecodigo
    agosto 24, 2009 #

    @diana,

    Te recomiendo que expongas tu problema, adjuntando el código en el Foro de JDBC.

    Y así podamos ayudarte.

  10. PEDRO GOVEA QUOÑONES
    agosto 26, 2009 #

    pARA CONECTAR CON ORACLE COMO LO HARIA SI DICE CON CON MYSQL
    com.mysql.jdbc.Driver”;
    String sURL = “jdbc:mysql://localhost:3306/lineadecodigo”;

1 2 3

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*