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!
java jsp servlet mysql insert query prepared
Commentami!