ResultSet com SP [Resolvido]

6 respostas
fabiojpoli

Olá pessoal, sei que para receber o resultado de um SELECT faço isso com um ResultSet assim:

try  
		{   
			Statement Stmt = conn.createStatement();   
			ResultSet rs = Stmt.executeQuery( SQLSelect );  
			while (rs.next()) {
				String Nome = (rs.getString("Nome_func"));
				System.out.println(Nome);
			}
			return rs; 
		}   
		catch( SQLException Erro )   
		{   
			Erro.printStackTrace();   
			System.out.println( "Não foi possível executar o comando: "  + SQLSelect);   
			throw new Exception( "Não foi possível executar a consulta desejada." );   
		}

mas se for uma SP? que irá retornar somente uma mensagem? mas que tenha um update e um select nela por exemplo, oque irá receber essa sp pra mostrar o resultado na tela ? Tentei fazer o mesmo que no select mas me retornou um erro.

Obrigado!

6 Respostas

M

fabio para trabalhar com procedures voce deve fazer um

CallableStatement cs = conn.prepareCall("{call PROCEDURE(?,?,?)}");

Lembre-se que uma procedure não retorna valores. Uma procedure tem parametros IN, OUT ou IN/OUT.

Logo voce deve recuperar o valor que a procedure te passou de um parametro OUT.

Segue um link com exemplos de chamadas a procedure.

http://www.exampledepot.com/egs/java.sql/CallProcedure.html

Espero ter ajudado.

fabiojpoli

Blz! executou, só falta me retornar o resultado da sp, o site que me passou mostra pra retornar vesultado dos parametro de saída, mas no caso desta SP, é somente uma mensagem que irá retornar, essa msg ta armazenada em uma variavel da SP, como faço pra retornar essa msg?

Obrigado!

M

Fabio, faz a atribuição da variavel ao parametro out, dentro da SP.

Abraços.

fabiojpoli

mezini:
Fabio, faz a atribuição da variavel ao parametro out, dentro da SP.

Abraços.

Eu pensei em fzr isso tbm, quer dizer que terei que fazer todas as saídas das minhas sp como parametro de saída? Somente assim para retornar o resultado?

Obrigado!

fabiojpoli

mezini:
Fabio, faz a atribuição da variavel ao parametro out, dentro da SP.

Abraços.

fiz isso, mas naum deu certo:

public CallableStatement SQLSelect(String SQLSelect)   
	throws Exception   
	{   
		try  
		{   
			CallableStatement cs = conn.prepareCall(SQLSelect);  
			
			cs.execute(); 
			String outParam = cs.getString(1);     
			System.out.println(outParam);
			return cs; 
		}   
		catch( SQLException Erro )   
		{   
			Erro.printStackTrace();   
			System.out.println( "Não foi possível executar o comando: "  + SQLSelect);   
			throw new Exception( "Não foi possível executar a consulta desejada." );   
		}  
	}   

public void ValidaLogin(Funcionario func) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		Conexao conn = new Conexao();
		
		conn.Conecta();
	
		String sql = "{call sp_ValidaUs('" + func.getLoginFunc() + "','" + func.getSenhaFunc() + "')}";
		try {
			conn.SQLSelect(sql);
			conn.Disconecta();
		} catch(Exception e1) {
			System.out.println("Erro!");  //cai aqui
		}
		conn.Disconecta();
	}
fabiojpoli

fabiojpoli:
mezini:
Fabio, faz a atribuição da variavel ao parametro out, dentro da SP.

Abraços.

Eu pensei em fzr isso tbm, quer dizer que terei que fazer todas as saídas das minhas sp como parametro de saída? Somente assim para retornar o resultado?

Obrigado!

Consegui com ajuda de um colega:

public CallableStatement SQLSelect(String SQLSelect)   
	throws Exception   
	{   
		try  
		{    
			CallableStatement cs = conn.prepareCall(SQLSelect);  
			cs.registerOutParameter(1, Types.VARCHAR);   
			cs.executeUpdate();     // ou executeQuery();   
			String outParam = cs.getString(1);          
			System.out.println(outParam); 
			
			cs.execute(); 
			/*String outParam = cs.getString(1);     
			System.out.println(outParam);*/
			return cs; 
		}   
		catch( SQLException Erro )   
		{   
			Erro.printStackTrace();   
			System.out.println( "Não foi possível executar o comando: "  + SQLSelect);   
			throw new Exception( "Não foi possível executar a consulta desejada." );   
		}  
	}   

public void validaLogin(Funcionario funcLog) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		Conexao conn = new Conexao();
		
		conn.Conecta();

		String sql = "{call sp_ValidaUs('" + funcLog.getLoginFunc() + "','" + funcLog.getSenhaFunc() + "',?)}";
		try {
			conn.SQLSelect(sql);
		} catch(Exception e1) {
			System.out.println("Erro!"); 
		}
		conn.Disconecta();
	}

Vlw!

Criado 10 de abril de 2009
Ultima resposta 14 de abr. de 2009
Respostas 6
Participantes 2