Probleme quand on clique sur le boutton upload
Fermé
natasha82
Messages postés
73
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour j'ai un programme qui fait upload fichier mais j'ai un soucis c'est lorsque je clique sur le bouton upload il m'affiche page blanche et j'ai une exception java.sql.SQLException: No value specified for parameter 3
la table cours(id,tilte,file)
{ id_Temp int 25 }
{ tilte varchar 25 }
{ file text 45 }
voici la jsp:
voici la servlet:
la table cours(id,tilte,file)
{ id_Temp int 25 }
{ tilte varchar 25 }
{ file text 45 }
voici la jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form method="POST" action="Upload" enctype="multipart/form-data" />
<center>
<table border="1" width="254" cellpadding="5"/>
<thead>
<th colspan="5">upload file </th>
</thead>
<tbody>
<tr>
<td>tilte:</td>
<td><input type="text" name="title"size="30"/>
</td>
</tr>
<tr>
<td> Choose file:</td>
<td><input type="text" name="file_upload" size="30"/>
</td>
</tr>
<tr>
<td colspan="1"><center><input type="submit" value="upload"></center></td>
</tr>
</tbody>
</table>
</center>
</form>
</body>
</html>
voici la servlet:
package Servlet;
import com.sun.corba.se.spi.protocol.RequestDispatcherDefault;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
public class UploadController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter() ;
InputStream inputStream=null;
Random rand= new Random();
int n=rand.nextInt(9999)+1;
String idTemp=(String.valueOf(n));
String Title= request.getParameter("title");
Part filePart=request.getPart("file_upload");
if(filePart!=null)
{
System.out.println(filePart.getSize());
System.out.println(filePart.getInputStream());
System.out.println( filePart.getContentType());
inputStream =filePart.getInputStream();
}
try {
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");
String sql="INSERT INTO cours(id_Temp,title,file)VALUES(?,?,?)";
PreparedStatement st= cn.prepareStatement(sql);
st.setString(1, idTemp);
st.setString(2, Title);
if(inputStream!=null){
st.setBinaryStream(3, inputStream, (int) filePart.getSize());
}
int row=st.executeUpdate();
if(row>0){
out.println("file upload");
cn.close();
RequestDispatcher rs=request.getRequestDispatcher("UploadFiles.jsp");
rs.include(request, response);
}
else{
out.println("on peu pa");
cn.close();
RequestDispatcher rs=request.getRequestDispatcher("UploadFiles.jsp");
rs.include(request, response);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
pouvez vous m'aider svp.merci
2 réponses
-
Bonjour
Je ne connais pas java, mais quand je vois ta requête avec ?,?,?, ton message d'erreur etst.setString(1, idTemp); st.setString(2, Title);
Je me dis qu'il doit manquer unst.setString(3, qqchose);
Non ? -
Bonjour,
Comme dit par le père. ton problème vient de tonsetBinaryStream(3
qui ne se fait jamais.
Faire des if pour vérifier que les données existent c'est bien, mais si tu n'as pas de else et que tu continues quand même le code, c'est incohérent.
Ici tu fais unPart filePart=request.getPart("file_upload");ce qui te renverra null, car tu as mis<input type="text" name="file_upload" size="30"/>
or les Part correspondent à des "multipart/form-data"
Voir la documentation.
Bref, tu faisif(filePart!=null) { ... inputStream =filePart.getInputStream(); }sauf que comme filePart vaut null, inputStream n'est pas initialisé, il vaut donc null.
Même chose,if(inputStream!=null){ st.setBinaryStream(3tu as inputStream qui vaut null, donc tu ne mets pas le troisième argument.
Et au final tu te retrouves avec une SQLException, mais c'est vraiment le dernier rempart pour détecter l'erreur, normalement tu aurais du arreter ton traitement bien avant, dès que la lecture de la requête montre qu'il manque des données.
Part filePart=request.getPart("file_upload"); if (filePart==null) { // j'envoie un message d'erreur, il manque une donnée return; // je ne fais pas la suite, ça ne sert à rien }