Probleme quand on clique sur le boutton upload

Fermé
natasha82 Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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:



<%@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

Utilisateur anonyme
 
Bonjour

Je ne connais pas java, mais quand je vois ta requête avec ?,?,?, ton message d'erreur et
 st.setString(1, idTemp);
st.setString(2, Title);

Je me dis qu'il doit manquer un
 st.setString(3, qqchose);

Non ?
0
natasha82 Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,mais j'ai fait ca :

st.setBinaryStream(3, inputStream, (int) filePart.getSize());
0
Utilisateur anonyme > natasha82 Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
Ça confirme que je ne connais pas java :-)
Je me risque quand même à continuer de suggérer : c'est peut-être que inputStream est null. L'as-vérifié en mettant un else à ton if(inputStream!=null) ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Comme dit par le père. ton problème vient de ton
setBinaryStream(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 un
Part 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 fais
if(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(3
tu 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
}
0