Insert MySql con JSP e Servlet

Mattepuffo's logo
Insert MySql con JSP e Servlet

Insert MySql con JSP e Servlet

Dopo aver visto come eseguire una semplice select sun db MySql con JSP e le Servlet, vediamo com'è possibile fare un inserimento.

Vi consiglio di dare prima una letta a questi due articoli che spiegano la classe per la connessione e come eseguire una select con JSP/Servlet:

Detto ciò andremo ad utilizzare un semplice form e una Servlet per eseguire la query di inserimento usando un PreparedStatement (che è la prima volta che uso).

Qui trovate un buon articolo.

In generale i PreparedStatement son delle query pre-compilate.

Alla pagina index.jsp aggiungiamo un semplice form:

<form action="DoInsert" method="post">
	<input type="text" name="txtEntrate" value=""/><br/>
	<input type="text" name="txtUscite" value=""/><br/>
	<input type="text" name="txtCausale" value=""/><br/>
	<input type="submit" name="Submit" value="Submit" />
</form>

Come action ci mettiamo la Servlet che andremo a creare.

Ricordatevi che la Servlet va aggiunta al web.xml dopo essere stata creata.

NetBeans lo fa in automatico, ma nell'altro articolo ho fatto vedere le voci che aggiunge:

import java.io.IOException;
import java.sql.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DoInsert extends HttpServlet {

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  doPost(request, response);
 }

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  response.setContentType("text/html");
  Connection conn = null;
  PreparedStatement ps = null;
  String entrate = request.getParameter("txtEntrate".trim());
  String uscite = request.getParameter("txtUscite".trim());
  String causale = request.getParameter("txtCausale".trim());
  String sql = "INSERT INTO movimenti(entrate,uscite,causale,data) VALUES(?,?,?,curdate())";
  boolean proceed = false;
  try {
   if (entrate != null && uscite != null && causale != null) {
    if (entrate.length() > 0 && uscite.length() > 0 && causale.length() > 0) {
     proceed = true;
     conn = Connessione.getConnection();
     ps = conn.prepareStatement(sql);
     if (proceed) {
      ps.setString(1, entrate);
      ps.setString(2, uscite);
      ps.setString(3, causale);
      ps.executeUpdate();
     }
     RequestDispatcher disp = request.getRequestDispatcher("DoSelect");
     disp.forward(request, response);
    }
   }
  } catch (ClassNotFoundException ex) {
   ex.getMessage();
  } catch (SQLException ex) {
   ex.getMessage();
  } finally {
   try {
    ps.close();
   } catch (SQLException ex) {
    ex.getMessage();
   }
  }
 }
}

Il metodo doGet richiama semplicemente doPost; è qui che viene fatto il lavoro.

Le prime tre String servono per recuperare i valori dal form.

Ciò viene fatto con request.getParameter al quale viene passato ila volore dei campi (ad esempio "txtEntrate").

Quello che deve essere messo messo come argomento è il nome delle textbox del form.

Poi c'è stringa sql che corrisponde alla query da eseguire.

Come vedete i VALUES hanno tutti ? tranne la data per la quale uso la funzione curdate() di MySql.

I ? verranno sostituiti dai valori del form; questa è una particolarità dei PreparedStatement.

Poi ho un boolean che mi serve per controllare se tutto è ok.

Infatti se le textbox non sono vuote il boolean diventa true e inizializzo la connessione.

Se proceed è true allora eseguo la query:

if (proceed) {
    ps.setString(1, entrate);
    ps.setString(2, uscite);
    ps.setString(3, causale);
    ps.executeUpdate();
}

Poi faccio il forward su DoSelect che mi esegue di nuovo la select e fa il forward su index.jsp che mi mostra i dati.

Nel prossimo articolo vedremo come cancellare i dati!


Condividi

Commentami!