PDA

Visualizza la versione completa : [servlet] Query esatta,ma da servlet non funziona


Mifert4
23-05-2014, 16:28
Ho scritto una servlet che riscrivendo il metodo post,riceve come parametro l'id di un libro e esegue una query che modifica una parametro di questo libro sul rispettivo database. Premesso che ho provato a verificare,sulla servlet, con out.println(query) la sequenza che veniva eseguita sul database(query è appunto la stringa sql), e la cosa strana è che quando provo a copiare la stringa dll'output ed eseguila manualmente su mysql fa esattamente quello che deve fare, se invece la faccio eseguire alla servlet no,nel senso che il campo sul database non viene aggiornato.
Da cosa potrebbe dipendere un errore di questo tipo?

Posto il codice:

import javax.servlet.http.*;
import javax.servlet.*;
import java.sql.*;
import java.io.*;


public class CuartaServlet extends HttpServlet {
public void doPost (HttpServletRequest req, HttpServletResponse res)throws IOException {
Connection con;
Statement st;
PrintWriter out;
ResultSet rs;
String SQL;
String idLibro,Disponibilidad;

try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e) {
System.out.println("Error driver");
e.printStackTrace();
}


try {
con=DriverManager.getConnection("jdbc:mysql://localhost/mydb" , "root" ,"");
st=con.createStatement();
out= res.getWriter();
res.setContentType("text/html");

idLibro=req.getParameter("idLibro");
Disponibilidad=req.getParameter("disponibilidad");

out.println("<HTML><BODY>");

if(Disponibilidad.equals("si")) {
SQL="UPDATE libros SET situación=\'disponible\' WHERE idLibro="+idLibro;
st.executeQuery(SQL);
out.println("Actualizado: libro disponible");
st.close();
}
else {
SQL="UPDATE libros SET situación=\'préstamo\' WHERE idLibro="+idLibro;
st.executeQuery(SQL);
out.println("Actualizado: libro no disponible");
st.close();
}
out.println("</BODY></HTML>");

out.close();
con.close();
}
catch(Exception e) {
System.out.println("Error");
e.printStackTrace();
}
}
}

ricardobr
23-05-2014, 18:18
Ho scritto una servlet che riscrivendo il metodo post,riceve come parametro l'id di un libro e esegue una query che modifica una parametro di questo libro sul rispettivo database. Premesso che ho provato a verificare,sulla servlet, con out.println(query) la sequenza che veniva eseguita sul database(query è appunto la stringa sql), e la cosa strana è che quando provo a copiare la stringa dll'output ed eseguila manualmente su mysql fa esattamente quello che deve fare, se invece la faccio eseguire alla servlet no,nel senso che il campo sul database non viene aggiornato.
Da cosa potrebbe dipendere un errore di questo tipo?

Posto il codice:

import javax.servlet.http.*;
import javax.servlet.*;
import java.sql.*;
import java.io.*;


public class CuartaServlet extends HttpServlet {
public void doPost (HttpServletRequest req, HttpServletResponse res)throws IOException {
Connection con;
Statement st;
PrintWriter out;
ResultSet rs;
String SQL;
String idLibro,Disponibilidad;

try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e) {
System.out.println("Error driver");
e.printStackTrace();
}


try {
con=DriverManager.getConnection("jdbc:mysql://localhost/mydb" , "root" ,"");
st=con.createStatement();
out= res.getWriter();
res.setContentType("text/html");

idLibro=req.getParameter("idLibro");
Disponibilidad=req.getParameter("disponibilidad");

out.println("<HTML><BODY>");

if(Disponibilidad.equals("si")) {
SQL="UPDATE libros SET situación=\'disponible\' WHERE idLibro="+idLibro;
st.executeQuery(SQL);
out.println("Actualizado: libro disponible");
st.close();
}
else {
SQL="UPDATE libros SET situación=\'préstamo\' WHERE idLibro="+idLibro;
st.executeQuery(SQL);
out.println("Actualizado: libro no disponible");
st.close();
}
out.println("</BODY></HTML>");

out.close();
con.close();
}
catch(Exception e) {
System.out.println("Error");
e.printStackTrace();
}
}
}


================================================== ========================

Deve fare cosi come sotto.
Deve usare executeUpdate(query) e retirare la linea
st=con.createStatement();

(Dispiace mio povero italiano)




import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class CuartaServlet extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {

public void doPost (HttpServletRequest req, HttpServletResponse res)throws IOException {
Connection con;
PreparedStatement st;
PrintWriter out;
ResultSet rs;
String SQL;
String idLibro, Disponibilidad;


try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e) {
System.out.println("Error driver");
e.printStackTrace();
}


try {
con = DriverManager.getConnection("jdbc:mysql://localhost/mydb" , "root" ,"");
out = res.getWriter();
res.setContentType("text/html");

idLibro = req.getParameter("idLibro");
Disponibilidad=req.getParameter("disponibilidad");

out.println("<HTML><BODY>");

if(Disponibilidad.equals("si")) {
SQL="UPDATE libros SET situación='disponible' WHERE idLibro="+idLibro;
st = con.prepareStatement(SQL);
st.executeUpdate(SQL);
out.println("Actualizado: libro disponible");
st.close();
}
else {
SQL="UPDATE libros SET situación='préstamo' WHERE idLibro="+idLibro;
st = con.prepareStatement(SQL);
st.executeUpdate(SQL);
out.println("Actualizado: libro no disponible");
st.close();
}
out.println("</BODY></HTML>");

out.close();
con.close();
}
catch(Exception e) {
System.out.println("Error");
e.printStackTrace();
}
}


}

Mifert4
23-05-2014, 21:40
Grazie mille!!

Loading