UNIDAD 9: BASES DE DATOS

JAVA TEMA 4: INSERCCION SQL INSERT

Recordar que en base de datos, la operacion de agregar renglones o registros recibe el nombre de insercción.

La instrucción basica de SQL a usar es:

insert into tabla values (10, 'lauro','tijuana', 821055);

y executeUpdate se usa para insert, update y delete

Otro elemento importante a recordar es que se ocupan claves de preferencia numericas y consecutivas, por esta razon en el diseño de la base de datos en access se pidio que el campo clave fuese de tipo autonumber para que al ir agregando renglones access les fuese agregando la clave en forma consecutiva.

Como se resuelve este problema en java?

La solución que se propone en el programa ejemplo es primero abrir una sesion o canal en su propio procedimiento(se acuerdan de la penultima unidad del curso), cargar la tabla en memoria con una instrucción select como se hizo en el ejemplo anterior, navegar al ultimo renglon tabla.last(), leer el valor de la primera columna en una variable entera llamada clave e incrementar esta variable en una unidad y listo ya tenemos la clave del siguiente renglon, no olvidar cerrar este canal o sesion( si se acuerdan que solo se puede inyectar una instruccion sql en una sesion-canal).

Despues ya en una segunda sesion-canal, se hace el insert del SQL, como lo muestra el programa ejemplo.

Programa HTML

<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog39 METHOD=POST>
NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD:<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=GRABAR>
</FORM></HTML>

Observar que no se pide la clave al usuario.

SERVLET

Codigo JAVA

import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*;
public class prog39 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
static int clave=0;
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//cargando clave en su propia sesion-canal
cargarclave();
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){System.out.println("classnotfound");}
catch(SQLException e) {System.out.println("error de enlace canal");}//fin try
response.setContentType("text/html");
//cargando los demas campos a grabar
String nombre = request.getParameter("NOMBRE");
//capturando y conviertiendo edad str-obj-var
Integer temp=Integer.valueOf(request.getParameter("EDAD"));
int edad= temp.intValue();
// insert into tabla values(clave, 'nombre', edad);
String q="insert into tabla values(" +clave +",'"+ nombre+"',"+edad+") ";
try { // agregando renglon (insert) y observar que es executeupdate()
int n=instruccion.executeUpdate(q);
//avisando que se hizo la instruccion
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println(n+"YA SE INSERTO, BACK PARA REGRESAR");
pagina.println("</HTML");
pagina.close(); } //termina try
catch(SQLException e) { System.out.println("error del sql probable mala instruccion sql"); }; //fin catch
destroy();
try {canal.close();} catch(SQLException e) {System.out.println("error el cerrar el canal");};
} ;//fin dopost
//construyendo procedimiento cargarclave() con su propia sesion-canal
static void cargarclave(){
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
catch(java.lang.ClassNotFoundException e)
{System.out.println("no pude encontrar el driver"); }; //fin try
try {canal=DriverManager.getConnection("jdbc:odbc:mibase"," "," ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//select ocupa executequery()
tabla = instruccion.executeQuery("Select * from tabla");
// calculo de reng y/o clave
tabla.last(); int numreng=tabla.getRow(); tabla.beforeFirst();
clave=numreng+1;
instruccion.close(); canal.close();
} catch(SQLException ex){ System.out.println("error en sql"); };//fin try catch
};//fin cargarclave()
//otro procedimiento
public void destroy() {super.destroy();};
}//fin clase prog39

Recordar que un programa bien documentado (como este que les estoy mostrando) es autoexplicativo

Corrida HTML

image58.jpg

Corrida java (usando programa anterior prog38 para ver la insercción).

image60.jpg

TAREAS JAVA SERVLET

Cosntruir java servlets que inserten registros o renglones en sus tablas de su base de datos, seria bueno agregar la posibilidad de que cuando se avise de que ya se hizo la inserccion, se pudiese mandar llamar al programa que despliega lo tabla en disco (prog38).

Politica de Privacidad