Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

java JDBC - ResultSet retornando 0 no ao tentar efetuar um insert

Olá pessoal, estou com um probleminha aqui e gostaria de uma ajuda por favor, estou tentando fazer um insert num tabela JOGADOR com FK, mas antes pensando a ID do USUARIO, porém não consigo pegar o ID do usuário no select para referenciar no insert.

se na variável abaixo eu deixar 0 ele não achará nenhum usuário, pq não tem ninguém com 0 no ID e ai retorna o erro abaixo e não adiciona nada na DB.

 int idresult = 0;

Erro de SQLjava.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). Erro no SQL2com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (nadalspringmvc.jogador, CONSTRAINT jogador_ibfk_1 FOREIGN KEY (ID_USUARIO) REFERENCES usuario (ID_USUARIO))

Mas se eu mudar a variável para o numero 9 onde existe um usuário com essa ID e por sinal é o mesmo que eu quero inserir quando tento buscar pela SESSION, ele adiciona no banco, mas pq eu setei o 9 e não porque ele buscou no SELECT e me retorna esse erro.

Erro de SQLjava.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

CREATE TABLE USUARIO (
    ID_USUARIO int NOT NULL AUTO_INCREMENT,
    LOGIN VARCHAR (50) NOT NULL,
    SENHA VARCHAR (8) NOT NULL,
    PRIMARY KEY (ID_USUARIO)
);
CREATE TABLE JOGADOR (
    ID_JOGADOR  int NOT NULL AUTO_INCREMENT,
    NOME_JOGADOR VARCHAR (20) NOT NULL,
    ID_USUARIO int,
    PRIMARY KEY (ID_JOGADOR),
    FOREIGN KEY (ID_USUARIO) REFERENCES USUARIO(ID_USUARIO)
);
    public void inserirJogador(JogadoresDTO jogador, String sessionLogin, String sessionSenha) {
        conexao();
        int idresult = 0;

        try {
            try (PreparedStatement ps = this.con.prepareStatement("SELECT id_usuario FROM usuario WHERE login = '" + sessionLogin + "' AND senha = '" + sessionSenha + "';")) {
                ps.setString(1, sessionLogin);
                ps.setString(2, sessionSenha);
                try (ResultSet rs = ps.executeQuery()) {
                    if (rs.next()) {
                        int tempID = rs.getInt("id_usuario");
                        jogador.setId(tempID);
                        idresult = jogador.getId();
                    } else {
                        System.out.println("Cliente não encontrado");
                    }
                }
            }
            con.close();
        } catch (SQLException e) {
            System.out.println("Erro de SQL" + e);
        }
        try {
            try (PreparedStatement ps2 = this.con.prepareStatement("INSERT INTO JOGADOR (nome_jogador, id_usuario) VALUES (?,?);")) {
                ps2.setString(1, jogador.getNome());
                ps2.setInt(2, idresult);
                ps2.execute();
            }
            con.close();
        } catch (SQLException e) {
            System.out.println("Erro no SQL2" + e);
        }
    }
1 resposta
solução!

Resolvido com um insert mais elegante :)

    public void insert(ModalidadesDTO modalidade, String sessionLogin, String sessionSenha) throws SQLException {
        conexao();
        String sql = "INSERT INTO modalidade (nome_modalidade, id_usuario) VALUES ( ?, (SELECT id_usuario from usuario WHERE login = '" + sessionLogin + "' and senha = '" + sessionSenha + "') );";
        try {
            try (PreparedStatement stmt = con.prepareStatement(sql)) {
                stmt.setString(1, modalidade.getNome());
                stmt.execute();
            }
        } catch (SQLException u) {
            System.out.println("Erro Insert <JogadoresDAO> :" + u.getMessage());
            throw new RuntimeException(u);
        } finally {
            fechar();
        }

    }