Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema para registrar datos CallableStatement

Buenos dias/tardes dependiendo del lugar :D ..

Tengo el siguiente problema con este Metodo que no me registra los datos en una tabla que se encuentra en SQL Server.

El SP es el siguiente:

Create procedure insertUsuLog
(
@idusu varchar(10),
@nomusu varchar(30),
@apeusu varchar(30),
@telusu nvarchar(12),
@emausu varchar (30),
@clavusu varchar(12)
)
as
begin
Begin Transaction
Begin Try
insert into Usuario (IdUsu,NomUsu,ApeUsu,TelUsu,EmaUsu)
values (@idusu,@nomusu,@apeusu,@telusu,@emausu);
/*
insert into Logeo (IdUsu,clavUsu)
values (@idusu, @clavusu);
*/
Commit Transaction;
End try
Begin Catch
PRINT 'Se recupero la transaccion'
Rollback Transaction;
End Catch
end

// Java, estoy trabajando con Netbeans, el metodo es el siguiente (DONDE TENGO PROBLEMAS)

public boolean guardarUsuario(){
boolean resp = false;

try {
String procsql="{call insertUsuLog{?,?,?,?,?,?}";
CallableStatement cmd = cn.prepareCall(procsql);
cmd.setString(1, idusu);
cmd.setString(2, nomusu);
cmd.setString(3, apeusu);
cmd.setString(4, telusu);
cmd.setString(5, emausu);
cmd.setString(6, clave);


cmd.executeQuery();
if(resp){

resp=true;
cn.commit();
//cmd.executeUpdate();

//rs = cmd.executeQuery();
}

} catch (Exception e) {
System.out.println("Error " + e.getMessage());
}
return resp;
}

// Codigo que se encuentra dentro del boton registrar:
private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {
//Ingreso obj = new Ingreso();
String idUsuario =txtIdUsuario.getText();
String nomUsuario=txtNomUsuario.getText();
String apeUsuario=txtApeUsuario.getText();
String telUsuario= txtTelUsuario.getText();
String emaUsuario= txtEmaiUsuario.getText();
String clavUsuario=pxtClavusuario.getText();

use.setIdusu(idUsuario);
use.setNomusu(nomUsuario);
use.setApeusu(apeUsuario);
use.setTelusu(telUsuario);
use.setEmausu(emaUsuario);
use.setClave(clavUsuario);

if (use.guardarUsuario()) {
JOptionPane.showMessageDialog(null, "Datos guardados");
limpiar();
} else {
JOptionPane.showMessageDialog(null, "Error al guardar los datos");
}
}

// Cuando ejecuto, lleno los campos y le doy click en registrar, me sale el siguiente error:
"Error Incorrect syntax near '@P0'. "

Que como veran, la variabled @P0, no existe y no tengo idea de por que sale con ese mensaje de error.

Espero me puedan ayudar.

Gracias.

julio 21, 2014 | Unregistered CommenterEmilio

Tu procedimiento almacenado funciona si lo ejecutas directamente?


Un saludo

julio 22, 2014 | Unregistered CommenterUnoPorAhi

Por otro lado nunca puede entrar en
if(resp){

Ya que la variable la seteas a false y nunca la pones a true antes de llegar a ese if

julio 22, 2014 | Unregistered CommenterUnoPorAhi

Claro, el procedimiento almacenado si ejecuta con normalidad.
El problema esta en el metodo.

Es por eso que estoy consultando como deberia hacer el metodo correcto para poder ejecutar la accion de resgistrar.

julio 22, 2014 | Unregistered CommenterEmilio

Como comprenderas, si no lo indicas no lo puedo adivinar. El error que te esta devolviendo es un error interno de SQL Server.

No entiendo estos humos que teneis en el foro ultimamente, encima que dedico algo de mi tiempo desinteresadamente a intentar ayudaros con vuestros problemas.

Aparentemente el problema no esta en Java, sino en la forma en que llamas al procedimimento:
{call insertUsuLog{?,?,?,?,?,?}

No tengo ni idea de SQLServer pero no sera mas bien:
{call insertUsuLog(?,?,?,?,?,?)}

??

Un saludo

julio 23, 2014 | Unregistered CommenterUnoPorAhi

Como dice @Uno el problema no está en el código Java, sino que lo genera el parser SQL de la base de datos, porque la cadena SQL está mal construida.
Por otra parte, no publicas el código completo. Por ejemplo, ¿Qué es esa variable "use"?

julio 23, 2014 | Registered Commenterchoces

Muchachos gracias a todos por su ayuda.
Unoporahi
Tenias razon la sintaxis era esta:
{call insertUsuLog(?,?,?,?,?,?)}
Fue descuido mio no darme cuenta, gracias hermano.

Choces,
Con respecto al "use", te adjunto la clase UsuarioDao, ese "use" es un objeto creado de esa clase para ser itlizado en la clase "AltaUsuarios".
Aqui te lo dejo:

public class UserDAO {

//Cremos un objeto de tipo conexion para conectarnos
Connection cn;

//Creamos un resulset para almacenar la ejecucion de los querys
ResultSet rs;

String idusu="";
String clave="";
String nomusu="";
String apeusu="";
String telusu="";
String emausu="";

public String getIdusu() {
return idusu;
}

public void setIdusu(String idusu) {
this.idusu = idusu;
}

public String getClave() {
return clave;
}

public void setClave(String clave) {
this.clave = clave;
}

public String getNomusu() {
return nomusu;
}

public void setNomusu(String nomusu) {
this.nomusu = nomusu;
}

public String getApeusu() {
return apeusu;
}

public void setApeusu(String apeusu) {
this.apeusu = apeusu;
}

public String getTelusu() {
return telusu;
}

public void setTelusu(String telusu) {
this.telusu = telusu;
}

public String getEmausu() {
return emausu;
}

public void setEmausu(String emausu) {
this.emausu = emausu;
}

public UserDAO() {
//Creamos un objeto de la clase ConexBD
ConexBD con = new ConexBD();
//Con ese objeto, llamamos al metodo ConexBD
cn = con.ConexBD();

}

Un abrazo, saludos.

julio 23, 2014 | Unregistered CommenterEmilio