Ajuda CRUD

1 resposta
java
Guilherme_Pasqualin

Olá, gostaria de ajuda para resolver esse erro no meu CRUD, estou com erro na linha destacada.

public class CadastroUsuarioControl implements CadastroControl {

PreparedStatement stmt;
Connection con;

Conexao cone;

public CadastroUsuarioControl() {
    cone = new Conexao();
}

@Override
public void save(CadastroUsuario cadastroUsuario) {

    String sqlSalvar = "INSERT INTO CadastroUsuario (NOME, LOGIN, SENHA, FUNCAO) VALUES (? , ?, ?, ?)";
    try {
        int index = 0;
        **cone.stmt.openConection().prepareStatement(sqlSalvar);**
        stmt.setString(++index, cadastroUsuario.getNome());
        stmt.setString(++index, cadastroUsuario.getLogin());
        stmt.setString(++index, cadastroUsuario.getSenha());
        stmt.setString(++index, cadastroUsuario.getFuncao());
        stmt.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(CadastroUsuarioControl.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}

String url = jdbc:mysql://localhost:3306/sistemaADV;

String driver = com.mysql.jdbc.Driver;

String user = root;

String password = “”;
public void openConection() throws SQLException {

    try {
        Class.forName(driver);
        con = (Connection) DriverManager.getConnection(url, user, password);

        stmt = (PreparedStatement) con.createStatement();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public static void main (String[] args) throws SQLException {
 Conexao cone = new Conexao();
 cone.openConection();
}

}

1 Resposta

lucas.sampaio

Apaga a linha stmt = (PreparedStatement) con.createStatement(); do método openConection() já que um outro statement é feito dentro do método CadastroUsuarioControl#save. Ou seja, está sendo feito dois statements, o da conexão e o método que tu tá chamando “por cima dele”.

O método openConection() deve retornar uma Conexão ou seja

public Connection openConnection(){
    Connection conn = null;
    try{
        Class.forName(driver);
        conn = DriverManager.getConnection(url, user, password);
    }  catch (ClassNotFoundException ex) {
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
    }
    return conn;
}

Quando for chamar no método CadastroUsuarioControl#save, chama da seguinte forma:

Connection conn = new Conexao();
 PreparedStatement stmt = conn.openConection().preparedStatement(sql);

Outra coisa é que no stmt.setString(++index, [field]); pode ser trocado pelos indices direto. Ficaria:

stmt.setString(1, [field1]);
stmt.setString(2, [field2]);
...
Criado 27 de julho de 2018
Ultima resposta 27 de jul. de 2018
Respostas 1
Participantes 2