Bonjour,

Je souhaite remplacer l'autentification à une application en utilisant preparedstatement à la place de statement pour une meilleure perf.

voici le code que j'ai mis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
package com.web.app.struts.action;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
 
import com.web.app.connexion.DBConnection;
import com.web.app.struts.form.LogonForm;
 
public class LoginAction extends Action {
 
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
 
		LogonForm _form = (LogonForm)form;
		String login = _form.getLogin().toUpperCase();
		String password = _form.getPassword().toUpperCase();
		int counter = 0;
 
 
	    try {	
			Connection myConnexion = DBConnection.getInstance().getConnection();
			//Statement stmt = myConnexion.createStatement();
			String sql = "SELECT * FROM COLLABORATEURS_TR WHERE INITIALES = ? AND COMMENTAIRE = ?";
			PreparedStatement ps = myConnexion.prepareStatement(sql);
			ps.setString(1, login);
			ps.setString(2, password);
			//String sql = "SELECT * FROM COLLABORATEURS_TR WHERE INITIALES = 'AALI' AND COMMENTAIRE = 'TEST'";
			//ResultSet rs = stmt.executeQuery(sql);
			ResultSet rs = ps.executeQuery(sql);
				while(rs.next()){
					counter++;
				}
				rs.close();
				//stmt.close();
				ps.close();
				myConnexion.close();
	      }catch(SQLException sqle){
	    	  System.out.println(sqle);
	      } 
 
		HttpSession session = request.getSession(true);
		if(counter > 0){
			return mapping.findForward("success");	
		}else{
			return mapping.findForward("failure");
		}	
	}
}
et voilà l'erreur que je reçois :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid call Statement method: {0}
précision : j'utilise sqlserver comme bdd (et je sais que le preparedstatement ne fonctionne pas sous access et mysql mais fonctionne avec oracle).
si quelqu'un a une idée ...

merci