Ajuda com PreparedStatement

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package controlbus.BD;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import controlbus.Bean.UsuarioBean;

/**
*

  • @author Vagner Duarte
    */
    public class InserirUsuario {
    PreparedStatement pstm;
    ResultSet rs;
    String gravarusuario = “INSERT INTO (LOGIN, SENHA, NIVEL_ACESSO) VALUES (?,?,?)”;

    public void CadastrarUsuario(UsuarioBean usuario){
    try{
    ConectarMysql con = new ConectarMysql();
    pstm = con.Conectar().prepareStatement(gravarusuario);

     pstm.setString(1, usuario.getLogin());
     pstm.setString(2, usuario.getSenha());
      pstm.setInt(3,usuario.getAcesso());
      pstm = (PreparedStatement) con.Conectar().prepareStatement(gravarusuario);
    
     pstm.executeUpdate();
     // System.out.println(gravarusuario);
     // System.out.println(usuario.getAcesso());
     }
    
     catch(Exception e){
     e.printStackTrace();
     }
    

    }

}[/code]

Pessoal tenho a classe acima, mais esta acontecendo o seguinte erro:

incompatible types na seguinte linha:
pstm = con.Conectar().prepareStatement(gravarusuario);

Alguem pode me ajudar a resolver este erro???

O problema deve estar no seu método Conectar() que não deve estar retornando um objeto Connection.

[quote=vagner.analista][code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package controlbus.BD;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import controlbus.Bean.UsuarioBean;

/**
*

  • @author Vagner Duarte
    */
    public class InserirUsuario {
    PreparedStatement pstm;
    ResultSet rs;
    String gravarusuario = “INSERT INTO (LOGIN, SENHA, NIVEL_ACESSO) VALUES (?,?,?)”;

    public void CadastrarUsuario(UsuarioBean usuario){
    try{
    ConectarMysql con = new ConectarMysql();
    pstm = con.Conectar().prepareStatement(gravarusuario);

     pstm.setString(1, usuario.getLogin());
     pstm.setString(2, usuario.getSenha());
      pstm.setInt(3,usuario.getAcesso());
      pstm = (PreparedStatement) con.Conectar().prepareStatement(gravarusuario);
    
     pstm.executeUpdate();
     // System.out.println(gravarusuario);
     // System.out.println(usuario.getAcesso());
     }
    
     catch(Exception e){
     e.printStackTrace();
     }
    

    }

}[/code]

Pessoal tenho a classe acima, mais esta acontecendo o seguinte erro:

incompatible types na seguinte linha:
pstm = con.Conectar().prepareStatement(gravarusuario);

Alguem pode me ajudar a resolver este erro???[/quote]

Vagner,

acho que se eu fosse vc eu trocava isso:

import com.mysql.jdbc.PreparedStatement;  

por isso:

import java.sql.PreparedStatement;  

Pois dessa maneira que você está fazendo, vc seria obrigado a fazer um (cast), assim no teu código:

pstm = (PreparedStatement) con.Conectar().prepareStatement(gravarusuario);  

ou

java.mysql.PreparedStatement pstm = con.Conectar().prepareStatement(gravarusuario);

Só que acho muito feio se vc pode já de cara e com poucas linhas pode minimizar todo esse código.

O negócio é não complicar, java foi feito pra não complicar.

E é só isso, qualquer coisa, grita ou posta!!! rsrsrs

[]'s.

Diego Marinho o problema era esse mesmo, troquei como vc disse e deu certo, mas agora tem outro problema, o pstm não esta setando os valores nas ?, então quando eu mando imprimir como esta ficando o final fica assim:

INSERT INTO (LOGIN, SENHA, NIVEL_ACESSO) VALUES ?,?,?

Alguém sabe porque não esta substituindo os ? pelos valores que tem que ser setados???

[quote=vagner.analista]Diego Marinho o problema era esse mesmo, troquei como vc disse e deu certo, mas agora tem outro problema, o pstm não esta setando os valores nas ?, então quando eu mando imprimir como esta ficando o final fica assim:

INSERT INTO (LOGIN, SENHA, NIVEL_ACESSO) VALUES ?,?,?

Alguém sabe porque não esta substituindo os ? pelos valores que tem que ser setados???[/quote]

Vagner,

você já pensou em colocar o nome da tabela depois do “INSERT INTO [table_name] (LOGIN,…”.
acho que assim o programa vai fazer a associação necessária.

Se não for isso, verifique o erro que causa ao final do procedimento da instrução.

Só prestar um pouco mais de atenção Vagner!

[]'s.

vagner.analista

a substituição das ? pelos valores é feito internamente, ou seja, mesmo vc dando um System.out.println na sua query,ela não mostrará os valores substituidos.
O que importa é se está funcionando.

Ainda está acusando algum erro? Se sim: Qual? Onde?

Opa.

Acabei de ver seu erro.

Primeiro você faz a conexão e seta os valores usando esse código aqui:

pstm = con.Conectar().prepareStatement(gravarusuario); pstm.setString(1, usuario.getLogin()); pstm.setString(2, usuario.getSenha()); pstm.setInt(3,usuario.getAcesso());

e logo após, antes de você executar o Update, você está refazendo a conexão, ou seja, zerando os valores que ali estavam já setados:

pstm = (PreparedStatement) con.Conectar().prepareStatement(gravarusuario); pstm.executeUpdate();
Daí quando ele vai fazer o update, não existem valores setados no preparedStatement(gravarusuario)

Espero que resolva seu problema. Abraço

[code]public void CadastrarUsuario(UsuarioBean usuario){
try{
ConectarMysql con = new ConectarMysql();
String gravarusuario = “INSERT INTO TB_LOGIN(LOGIN, SENHA, NIVEL_ACESSO) VALUES (?,?,?)”;
//String gravarusuario = “INSERT INTO tb_login (login, senha, nivel_acesso)VALUES(”+usuario.getLogin()+","+usuario.getSenha()+
// “,”+usuario.getAcesso()+")";

    pstm = con.Conectar().prepareStatement(gravarusuario);

   pstm.setString(1, usuario.getLogin());
    pstm.setString(2, usuario.getSenha());
   pstm.setInt(3,usuario.getAcesso());
    pstm.executeQuery();
    
    }[/code]

a.moraissoares desculpe se estou dando trabalho, mas a minha classe acima esta fazendo tudo certo, pelo menos ao meu ver e não consigo ver onde esta o erro, quando eu executo veja a Exception que esta dando:

run: java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) at com.mysql.jdbc.Statement.checkForDml(Statement.java:417) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1383) at controlbus.BD.InserirUsuario.CadastrarUsuario(InserirUsuario.java:34) at controlbus.Funcoes.Usuario.PegarDadosUsuario(Usuario.java:266) at controlbus.Funcoes.Usuario.bt_gravarActionPerformed(Usuario.java:235) at controlbus.Funcoes.Usuario.access$200(Usuario.java:22) at controlbus.Funcoes.Usuario$3.actionPerformed(Usuario.java:107) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6216) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5981) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4583) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Vagner.analista,

substitua o

pstm.executeQuery();

por:

pstm.executeUpdate();

e veja se funciona.

Ate +