Bom dia !!
Bom ja dei uma procurada no forum e nao conseguir achar o uso da classe CallebleStatement com Sql Server , por isso estou abrindo um tópico …
Vamos la …
O problema é o seguinte : Não estou conseguindo chamar uma procedure no banco para me retornar um resultado .
como exemplo estou setando um parametro e recebendo dois , portante são 3 parametros , só que o tipo da variavel que o Sql Server retorna eu acho que é String , na classe “JavaTypes” do driver sqljdbc4.jar diz que é String , porém não consigo setar esse tipo . Somente outros como Varchar , Nvarchar etc …
Segue o codigo de exemplo …
public void selectDadosSQL(Cliente cliente)
{
private Connection connect; // Connecta com o SQL
private CallableStatement stmt;
try
{
// o tipo é String , porem nao consigo setar ...
getStrConnLocadora(); // metodo que abre minha conexao com o banco.
stmt = connect.prepareCall("{call pr_Cliente_sel(?,?,?)}");
stmt.setString(1, cliente.getNomeCliente());
stmt.registerOutParameter(2,Types.String ); // eu nao consigo usar o tipo String , nao aparece como opção , porem na class "JavaTypes"
stmt.registerOutParameter(3,Types.String);
stmt.execute();
cliente.setNomeCliente(stmt.getString(2));
cliente.setCpf(stmt.getString(3));
stmt.close();
connect.close();
}
catch (SQLException e)
{
System.out.println("Erro" +e.getMessage());
}
}
}
Caso eu esteja errado com meu raciocionio … qual seria o valor correta a ser registrado ?? Varchar , LOngvarchar ??
Vlws aew !!
o correto eh usar varchar, que seria a “string” do banco de dados.
mauricio entao como eu postei … Varchar nao é … pois varchar e do oracle … eu estou utilizando SQL Serve 2008 … =/
varchar tambem é do sqlserver e de muitos outros bancos.
segue um trecho da documentacao do sqlserver 2008
varchar [ ( n | max ) ]
Dados de caractere não-Unicode de comprimento variável. n pode ser um valor de 1 a 8.000. max indica o tamanho máximo de armazenamento, que é 2^31-1 bytes. O tamanho de armazenamento é o comprimento real dos dados inseridos + 2 bytes. Os dados digitados podem ter 0 caractere de comprimento. Os sinônimos de ISO para varchar são char varying ou character varying.
ele nao aceita … da o seguinte erro “ErroProcedure or function pr_Cliente_sel has too many arguments specified.”
fazer um insert , update e delete eu consigo fazer na boa… somente o select que esta de rosca !!
vlws !!!
public void selectDadosSQL(Cliente cliente)
{
try
{
getStrConnLocadora();
stmt = connect.prepareCall("{call pr_Cliente_sel(?,?,?)}");
stmt.setString(1, cliente.getNomeCliente());
stmt.registerOutParameter(2,java.sql.Types.VARCHAR );
stmt.registerOutParameter(3,java.sql.Types.VARCHAR);
stmt.execute();
cliente.setNomeCliente(stmt.getString(2));
cliente.setCpf(stmt.getString(3));
stmt.close();
connect.close();
}
catch (SQLException e)
{
System.out.println("Erro" +e.getMessage());
}
}
}
essa procedure realmente tem 3 parametros nela, pela mensagem esta dizendo que tem muitos parametros especificados.
[]'s
go
Use Locadora
go
if object_id('pr_Cliente_sel') is null exec('create proc pr_Cliente_sel as set nocount on')
go
alter procedure pr_Cliente_sel
@nomeCliente varchar(50) = null
as
set nocount on
select
nomeCliente,
cpf
from
Cliente cl
where
cl.nomeCliente = @nomeCliente
go
sp_recompile pr_Cliente_sel
go
Cara e coisa simples kkkk e esta me dando mta dor de cabeça … meu deus … mas nao vao descansar enquanto nao conseguir resolver isso …!!
cara, sua procedure nao esta declarado os parametros de saida, por isso da erro.
e so declarar o output ali entao ?? oO
isso, como se fosse parametros de entrada, exemplo:
function(param in type, param out type, param out type)
[]'s
Mauricio vlws !!! vou testar aqui assim que tiver um tempo no … e Posto do resultado !!
Mals pela Sumida … mas resolveu !!! vlws aew pela ajuda !!!