Update Array

3 respostas
R
seguinte galera, a pouco tempo fiz um insert atraves de um array, agora preciso fazer um update dele
public boolean enviarArray(int novapf, ArrayList<Parentesco> arr) {
		try {
			for (int x = 0; x < arr.size(); x++) {
				Parentesco parentesco = (Parentesco) arr.get(x);
				Connection c = ConnectionHelper.getConnection();
				String sqlinsert = "insert into parentesco "
						+ "(pf_cd_pessoafisica, cd_sequencial, nm_parente, cd_relacionamento, sn_coabita) "
						+ "values (?, (select nvl(max(cd_sequencial), 0)+1 from parentesco where pf_cd_pessoafisica = ?), ?, ?, ?)";
				PreparedStatement pstmt = c.prepareStatement(sqlinsert);
				pstmt.setInt(1, novapf);
				pstmt.setInt(2, novapf);
				pstmt.setString(3, parentesco.getnm_parente());
				pstmt.setString(4, parentesco.getcodigo());
				pstmt.setString(5, parentesco.getcodigoc());
				pstmt.executeUpdate();
				pstmt.close();
				ConnectionHelper.close(c);
				// System.out.println(novapf);
			}
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
[code]
essa foi a forma que fiz o insert, criei um método para apagar os dados da tabela e depois chamo o insert novamente, mas nao ficou funcional, alguém teria uma ideia?

Segue um exemplo dos meus updates...
[code]
public static boolean updateend(int novapf, CadastroEndereco cdtend) {
		try {
			Connection c = ConnectionHelper.getConnection();
			String sql_update = "update enderecos set " + "tp_endereco = ?, "
					+ "ds_logradouro = ?, " + "nu_logradouro = ?, "
					+ "ds_complemento = ?, " + "ds_bairro = ?, "
					+ "cd_cep = ?, " + "municipio_cd_municipio = ? "
					+ "where pf_cd_pessoafisica = " + novapf;
			PreparedStatement pstmt = c.prepareStatement(sql_update);
			pstmt.setString(1, cdtend.gettp_endereco());
			pstmt.setString(2, cdtend.getds_logradouro());
			pstmt.setString(3, cdtend.getnu_logradouro());
			pstmt.setString(4, cdtend.getds_complemento());
			pstmt.setString(5, cdtend.getds_bairro());
			pstmt.setString(6, cdtend.getcd_cep());
			pstmt.setInt(7, cdtend.getmunicipio_cd_municipio());
			pstmt.executeUpdate();
			pstmt.close();
			ConnectionHelper.close(c);
			// System.out.println(cd_pessoafisica);
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}

3 Respostas

Nicolas_Fernandes

Oi, rosequadra.
Eu faria da seguinte forma:

1. Como você vai inserir vários de uma vez, crio uma classe que me devolva somente uma conexão aberta por vez, para evitar várias conexões no BD à toa:
public class ConnectionFactory {

    private static ConnetionFactory connectionFactory = new ConnectionFactory();
    private Connection connection;
   
    private ConnectionFactory() {}
    public static ConnectionFactory getInstance() { return connectionFactory; }

    public Connection getConnection() throws SQLException {

        if (connection == null) {
            Class.forName("seu driver");
            connection = DriverManager.getConnection("url", "user", "pass");
        }
        return connection;
    }

     public void commit() throws SQLException {

         connection.commit();
         connection = null;
     }

     public void rolback() throws SQLException {

         connection.rolback();
         connection = null;
     }
}
2. Criaria um método para recuperar o valor da sequência:
public Long recuperarSequencial(String nomeSequencia, Parentesco parentesco) throws SQLException {
 
    Connection connectionSelect = ConnectionFactory.getInstance().getConnection();
    String sentencaSelect = "";
    sentencaSelect += "SELECT NVL(MAX(CD_SEQUENCIAL), 0) + 1 SEQUENCIAL FROM ";
    sentencaSelect += "PARENTESCO WHERE PF_CD_PESSOAFISICA = ?";

    PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);
    statementSelect.setLong(1, parentesco.getPf_Cd_PessoaFisica());
    
    ResultSet resultSelect = statementSelect.executeQuery();
    Long numeroSequencial;
    while (resultSelect.next()) {
        numeroSequencial = resultSelect.getLong("SEQUENCIAL");
    }
    return numeroSequencial;
}
3. Criaria um método para o insert:
public void adicionarParentesco(Parentesco parentesco) throws SQLException {
   
    Connection connectionInsert = ConnectionFactory.getInstance().getConnection();
    String sentencaInsert = "";
    sentencaInsert += "INSERTO INTO PARENTESCO (PF_CD_PESSOAFISICA, CD_SEQUENCIAL, ";
    sentencaInsert += "NM_PARENTE, CD_RELACIONAMENTO, SN_COABITA) VALUES (?, ?, ?, ?, ?, ?)";

    PreparedStatement statementInsert = connectionInsert.prepareStatement(sentencaInsert);
    statementInsert.setInt(1, novapf);
    statementInsert.setInt(2, novapf);
    statementInsert.setString(3, parentesco.getnm_parente());
    statementInsert.setString(4, parentesco.getcodigo());
    statementInsert.setString(5, parentesco.getcodigoc());
    statementInsert.execute();

    statementInsert.close();
}
4. Criaria um método para o update:
public void atualizarParentesco(Parentesco parentesco) throws SQLException {
   
    Connection connectionUpdate = ConnectionFactory.getInstance().getConnection();
    String sentencaUpdate = "";
    sentencaUpdate += "UPDATE PARENTESCO SET PF_CD_PESSOAFISICA = ?, CD_SEQUENCIAL = ?, ";
    sentencaUpdate += "NM_PARENTE = ?, CD_RELACIONAMENTO = ?, SN_COABITA = ? WHERE ID = ?;

    PreparedStatement statementUpdate = connectionUpdate.prepareStatement(sentencaUpdate);
    statementUpdate.setInt(1, novapf);
    statementUpdate.setInt(2, novapf);
    statementUpdate.setString(3, parentesco.getnm_parente());
    statementUpdate.setString(4, parentesco.getcodigo());
    statementUpdate.setString(5, parentesco.getcodigoc());
    statementUpdate.executeUpdate();

    statementUpdate.close();
}
5. Finalmente, criaria um método que forneceria o serviço de adicionar ou atualizar os valores de um array:
// PARA INSERÇÃO...
public void adicionarParentescos(List<Parentesco> parentescos) throws SQLException {

    for (Parentesco parentesco : parentescos) {
        adicionarParentesco(parentesco);
    }
    ConnectionFactory.getInstance().commit();
}

// PARA ATUALIZAÇÃO...
public void atualizarParentescos(List<Parentesco> parentescos) throws SQLException {

    for (Parentesco parentesco : parentescos) {
        atualizarParentesco(parentesco);
    }
    ConnectionFactory.getInstance().commit();
}

Sacou a ideia? Que acha??
Abraços!

R

Saquei, mas tipo vc saberia me dizer como fazer o update caso queira dar continuidade no que já tenho, é que tipo no projeto em si não tenho nada com essas estrutura sabe.

Nicolas_Fernandes

É só você colocar esses métodos na sua classe de persistência, criar uma nova classe de conexões e pronto! Qual a dúvida nisso? Se fosse mexer com arquitetura, eu mudaria milhões de coisas, mas fazendo o que falei acima já resolve seu problema.

Criado 25 de julho de 2011
Ultima resposta 26 de jul. de 2011
Respostas 3
Participantes 2