Probleme quand on clique sur le boutton upload

Fermé
natasha82 Messages postés 73 Statut Membre -  
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:


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

  1. 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
    1. natasha82 Messages postés 73 Statut Membre
       
      bonjour,mais j'ai fait ca :

      st.setBinaryStream(3, inputStream, (int) filePart.getSize());
      0
      1. Utilisateur anonyme > natasha82 Messages postés 73 Statut Membre
         
        Ç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
  2. KX Messages postés 19031 Statut Modérateur 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