|
       10.5.12 Servlet execm.java
       Rolul servlet-ului execm este acelasi cu al servletului inser.java cu deosebirea ca acum se face o operatie "update". Daca pozitia produsului ramane neschimbata atunci operatie este una singura: se modifica prin "update" campurile dorite de utilizator. Daca insa pozitia, se pune la inceput produsul in pozitia 0 (observatie- nu se vor face doua modificari in acelasi timp in baza de date) si se scade cu o unitate pozitia tuturor produselor de deasupra pozitiei vechi a produsului ( se astupa gaura lasata prin mutarea prodului in alta pozitie), iar daca pozitia noua nu este ultima pozitie + 1 atunci se muta toate produsele din noua pozitie in sus cu o unitate pe "a face loc" mutarii produsului. Campurile produsului se vor schimba prin update, inclusiv campul pozitie.
import java.io.*;
import java.util.*;
import java.util.Date;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.*;
import javax.servlet.http.HttpSession;
public class execm extends HttpServlet{
private String baseDir;//directorul aplicatiei pentru imaginile produselor alimentare
public void init(ServletConfig conf)throws ServletException {
super.init(conf);
baseDir = getServletConfig().getInitParameter("imagini");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
HttpSession ses = req.getSession();
Connection con=(Connection) ses.getAttribute("connexion");
String subcti=null;
/**
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
out.println("<head>");
out.println("<title> Pagina realizata cu servlet-ul execm" + "</title>");
out.println("</head>");
out.println("<body>");
**/
//subcategoria
subcti=(String)ses.getAttribute("subcat");
try {
Statement stmt;
//directorul cu imaginile categoriei;
String dir = baseDir + File.separator + "c" + subcti;
//se citesc parametrii
MultipartRequest multi = new MultipartRequest(req,dir,15*1024);
File f=null;
File g=null;
String fimp=null;
String type="";
String pname,dp,pret,up,expl,pozp,codp,no;
stoi Pret, Pozp;
//fisierul pentru upload, el este deja pe disc
pname="imp";
fimp = multi.getFilesystemName(pname);
if(fimp!=null){
type = fimp.substring(fimp.indexOf(".")+1,fimp.length());
f = multi.getFile(pname);
}
//denumire produs
pname="denp";
dp = multi.getParameter(pname);
//cod produs
pname="codp";
codp = multi.getParameter(pname);
//numar
pname="no";
no = multi.getParameter(pname);
//conditie minima pentru introducere in baza de date
if(dp!=null && codp!=null && no!=null){
pname="ump";
up = multi.getParameter(pname);
if(up==null) up=" ";
pname="pretp";
pret = multi.getParameter(pname);
Pret = new stoi(pret);
pname="pozp";
pozp = multi.getParameter(pname);
Pozp = new stoi(pozp);
pname="expl";
expl = multi.getParameter(pname);
if(expl==null) expl=" ";
//out.println("<br>" + type + " " + no + " " + codp + " " + dp + " "
//+ up + " " + Pozp.IntS() + " " + Pret.IntS() + "<br>" + expl);
String querry;
stmt = con.createStatement();
int pozprodus=Pozp.IntS();
if(!no.equals(String.valueOf(pozprodus))){
//se pune produsul in pozitia 0
querry="update alimente set no=0 where cat=" + subcti + " and codp=" + codp;
stmt.executeUpdate(querry);
//se muta produsele de deasupra fostei pozitii cu -1
querry="update alimente set no=no-1 where cat=" + subcti + " and no>" + no;
stmt.executeUpdate(querry);
//calcul numar de inregistrari
int iRowCount;
ResultSet rs;
rs = stmt.executeQuery("select count(no) from alimente where cat=" + subcti);
if(rs.getString(1)!=null)
iRowCount=Integer.parseInt(rs.getString(1));
else
iRowCount=0;
rs.close();
//pozitia noua
if(pozprodus>0 && pozprodus <= iRowCount){
//se muta produsele de deasupra pozitiei viitoare cu +1
querry="update alimente set no=no+1 where cat=" + subcti + " and no>=" + pozprodus;
stmt.executeUpdate(querry);
}
else
pozprodus=iRowCount+1;
}
//se modifica produsul
if(fimp==null)
querry="update alimente set denp=\"" + dp.trim() + "\", pretp=" + Pret.IntS()
+ ", um=\"" + (up.trim()).toLowerCase() + "\", expl=\"" + expl.trim()
+ "\", no=" + pozprodus + " where cat=" + subcti + " and codp=" + codp;
else{
querry="update alimente set denp=\"" + dp.trim() + "\", pretp=" + Pret.IntS()
+ ", um=\"" + (up.trim()).toLowerCase() + "\", expl=\"" + expl.trim()
+ "\", type=\"" + type + "\", no=" + pozprodus
+ " where cat=" + subcti + " and codp=" + codp;
String ren = dir + File.separator + codp + "." + type;
g = new File(ren);
g.delete();
f.renameTo(g);
}
//out.println("<br>"+ querry +"<br>");
stmt.executeUpdate(querry);
stmt.close();
}
}
catch(SQLException e) {;}
catch(Exception e) {;}
//out.println("</body></html>");
//out.close();
RequestDispatcher rd = req.getRequestDispatcher("modif");
rd.forward(req,res);
}
}
|
|