Problema com CallableStatement

4 respostas
U

Não consigo entender o que está errado...

String user = request.getParameter("Login");
	        	String senha = request.getParameter("Passwd");
	        	System.out.println(user + " - " + senha);
	        	
	        	//chamar Stored Procedure
	        	String sql = "{call PW[?,?,?,?]}";
	        	CallableStatement cstmt = conn.prepareCall(sql);
	    		cstmt.setString(1, user);  // <= O ERRO ESTÁ AKI
	        	cstmt.setString(2, senha);
	    		cstmt.registerOutParameter(3,Types.OTHER);
	    		cstmt.registerOutParameter(4,Types.OTHER);
	        	cstmt.execute();
	        	aut = cstmt.getString(3);
	        	acl = cstmt.getString(4);

ele não passa pelo setString, mas não sei o por que???

4 Respostas

J

Oi

Amigo, deve estar dando alguma Exception aqui

CallableStatement cstmt = conn.prepareCall(sql);

Por acaso este trecho não está dentro de um try/catch?

T+

U

Está dentro do try/catch...

ele retorna a seguinte exception = "java.sql.SQLException: Invalid parameter index 1"

Como se estivesse chamando o método incorretamente, mas aparentemente está correto...

String user = request.getParameter("Login");
System.out.println(user); //Ele imprime o nome do usuário
cstmt.setString(1, user); //gera a exception aqui

Desde já agradeço a ajuda....

U

Consegui resolver o problema chamando a Stored Procedure de outra forma...

if (conn != null) {
	        	
	        	String user = request.getParameter("sLogin_Login");
	        	String senha = request.getParameter("sPasswd_Login");
	        	System.out.println(user + " - " + senha);
	        	
	        	//chamar Stored Procedure de login no Banco de Dados
	        	String sql = "{? = call PW(?,?)}";
	        	CallableStatement cstmt = conn.prepareCall(sql);
	    		System.out.println("pcLogin - CallableStatement");
	    		cstmt.registerOutParameter(1,Types.OTHER);
	    		System.out.println("pcLogin - Typos");
	    		cstmt.setString(2, user);
	        		cstmt.setString(3, senha);
	    		cstmt.execute();

		         String aut = (String) cstmt.getObject(1); 
.....

Mas lança a exception "java.lang.ClassCastException "
Como eu descubro qual classe que retorna com o "cstmt.getObject(1)" ???
A StoredProcedure deve retornar 2 valores, sendo o primeiro uma String e o segundo um int

H

Aparentemente, há um descasamento entre o código JDBC e a sua stored procedure. Poste a sua stored procedure e o tipo do seu RDBMS para melhor avaliação.

Criado 25 de agosto de 2004
Ultima resposta 26 de ago. de 2004
Respostas 4
Participantes 3