Como inserir dados, com Resultset ou com PreparedStatement

9 respostas
maicollange
Olá pessoal,

Estou com  uma duvida, dei uma pesquisada sobre inserir dados e achei duas formar de ser feita, queria saber qual é a forma correta ou melhor de se trabalhar.

Segue um exemplo  de cada um dos tipos:

ex: Resultset

private PreparedStatement stm;

private ResultSet pessoas  = stm.executeSQL("Select * from pessoas);

pessoas.insertRow();

pessoas.updateInt(id, codigo);

pessoas.updateString(nome, nome);

pessoas.first();
ex:

private PreparedStatement stm;

stm.executeUpdate(INSERT INTO dlcliente( id_cliente, nome, rua, numero, bairro, cep, obs) VALUES(+

Utilitario.getSequencia(dlcliente, id_cliente)+",’"+

TFNome.getText()+"’,’"+

TFRua.getText()+"’,"+

TFNumero.getText()+",’"+

TFBairro.getText()+"’,’"+

TFCep.getText()+"’,’"+

TAObs.getText() +"’)");

Se alguem pode me ajudar, sou iniciante e gostaria de saber como se inseri registro e pesquisa registro no DB.
Abraço

9 Respostas

oberilo

Espero que isso lhe ajude . . .

Exemplo de PreparedStatement
=> http://www.guj.com.br/posts/list/40126.java

Ravnus

Leia sobre a classe ResultSetMetaData. Não sei explicar, mas acho que pode ajudar.

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSetMetaData.html

D
public void adiciona(Cliente cliente) throws ClassNotFoundException, SQLException{
		Connection c = gc.conectaBanco();
		PreparedStatement stmt = c.prepareStatement("Insert Into Cliente (telefone, celular, primeiroNome, ultimoNome, enderecoId) values (?,?,?,?,?)");
		
		stmt.setInt(1, cliente.getTelefone());
		stmt.setInt(2, cliente.getCelular());
		stmt.setString(3, cliente.getNome());
		stmt.setString(4, cliente.getSobrenome());
		stmt.setInt(5, (retornaMaxId()));
		stmt.execute();
	}
maicollange

metodo de inserção então sempre usando PreparedStatement e não resultset?

FacaNaCaveira

Fala ai maicollange blz?

Cara pelo pouco conhecimento que tenho, acredito que o ResulSet seja realmente so para retorno conforme exemplo abaixo:

public Pessoa find(int cod) throws Exception {
        open();
        Pessoa pessoa = null;
        stmt = con.prepareStatement("SELECT * FROM pessoa WHERE idpessoa=?");
        stmt.setInt(1, cod);
        rs = stmt.executeQuery();
        if (rs.next()) {
            pessoa = new Pessoa(rs.getInt("idpessoa"),
                    rs.getString("nome"),
                    rs.getString("email"),
                    rs.getDate("datanasc"));
        }
        stmt.close();
        close();
        return pessoa;
    }

Vale resaltar que rs esta definido como ResulSet

Abração 8)
Max

maicollange

Eai FacaNaCaveira,
Eu estou em duvido por que eu vi um exemplo, e o cara estava usando o resultset para inserir e atualizar os dados no banco, com métodos “rs.moveToInsertRow” e “rs.updateRow”, ai queria saber qual a vantagem(se tem!) de usar assim.
Por que quase todos os exemplos aqui no guj foi como o douglastc mostrou. não seria uma boa pratica usar o resultset para fazer isso, por que pelo que eu li o resulset seria usado somente para retorno de uma consulta e navegar nos dados.

maicollange

Pessoal não sei se estou conseguindo explicar a minha duvida, qualquer coisa avisa para eu tentar ser mais claro

maicollange

Pessoal segue um exemplo melhor pra ajudar a explicar

public class Conexao {
    public Connection conecta() {
        Connection result;
        try {
            Class.forName(driver);
            conexao = DriverManager.getConnection(url, usuario, senha);
            result = conexao;
        } catch (ClassNotFoundException Driver) {
            JOptionPane.showMessageDialog(null, "Driver não encontrado"+Driver);
            result = null;
        } catch (SQLException Fonte) {
            JOptionPane.showMessageDialog(null, "Deu erro na conexao com a fonte de dados");
            result = null;
        }
        return result;
    }

    public ResultSet executeSQL(String sql) {
        try {
            System.out.println(sql);

            PreparedStatement stm = conexao.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY);
            resultset = stm.executeQuery();
        } catch (SQLException sqlex) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar o comando sql," + sqlex + ","
                    + "o sql passado foi " + sql);
        }
        return resultset;
    }

}


public  class Pessoa {
 public Resultset rspessoa;
    public addpessoa(){        
        Conexao  con = new Conexao();
        con.conecta();         
        rspessoa =con.executeSQL("select * from pessoa");
        rspessoa.moveToInsertRow();
        rspessoa.updateInt("id", id);
        rspessoa.updateString("nome", TFnome.getText());
        rspessoa.insertRow();
    
    }
}
E

Companheiro, nunca usei o resultset para inserção ou edição, sempre usei o preparedStatement, mas quanto a sua duvida ja dei uma lida sobre o resultset, e sei que ele é melhor quando se refere a inserção/update de um registro, o statement ja teria um ganho de performace quando vc vai enviar varios registros ao mesmo tempo…

estou procurando tbem mais informações… assim como vc…

Criado 27 de outubro de 2010
Ultima resposta 28 de out. de 2010
Respostas 9
Participantes 6