Home / Programmazione / Java / Insert MySql con JSP e Servlet
Mattepuffo

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:

package operazioni_database;

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!