Duvida Atualização Dados Banco

10 respostas
R

Galera,

Tenho um aplicação que tem como objetivo de buscar o dados em um tabela, e mediante esses dados ele deverá fazer alguns calculos e gravá-los em outra tabela.
Se o calculo retornar zero, mesmo assim ele deverá gravar os dados na tabela
EX>

Nome / valor / data XXX - 0 - null ZZZ - 125 - 28/09/2004 YYY - 400 - 28/09/2004 QQQ - 0 - null

Porém a segunda vez que for executado ele deverá verificar se o calculo do item é diferente de ZERO se for deverá atualizar senão continua com a mesma informação

Como proceder, alguem teria algum exemplo???

10 Respostas

jvictorcf

Tente se explicar melhor, por favor

W

qual e a sua duvida???

R

Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada

OK???

W

se a sua duvida e essa


Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada

pq vc não posta o seu codigo para pordemos ajuda-lo?

R

“Wonder”:
se a sua duvida e essa

Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada

pq vc não posta o seu codigo para pordemos ajuda-lo?

Cara,

O erro que aparece é esse

java.sql.SQLException: Invalid argument value: Duplicate entry 'SPO_RET-1210_HR' for key 1 at com.mysql.jdbc.MysqlIO.sendCommand(Unknown Source) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(Unknown Source) at com.mysql.jdbc.Connection.execSQL(Unknown Source) at com.mysql.jdbc.PreparedStatement.executeUpdate(Unknown Source) at com.mysql.jdbc.PreparedStatement.executeUpdate(Unknown Source)

W

na boa velhinho, ainda não dar para te responder q erro estadando, se vc postar o seu codigo dar para ter uma ideia mais precisa :wink:

mais e mais ou menos assim:
1 - consulta de uma tabela e coloca os dados em um objeto
2 - se o objeto existir no banco entao atualiza os dados
3 - senao existir inseri no banco

e claro q nao esta sendo considerado a logica de negocio…

R
"Wonder":
na boa velhinho, ainda não dar para te responder q erro estadando, se vc postar o seu codigo dar para ter uma ideia mais precisa :wink:

mais e mais ou menos assim:
1 - consulta de uma tabela e coloca os dados em um objeto
2 - se o objeto existir no banco entao atualiza os dados
3 - senao existir inseri no banco

e claro q nao esta sendo considerado a logica de negocio...

Segue o Codigo

private static final String _QueryDeGravacao = "insert into realtime values (?,?,?)";
        private static final String _QueryHistory = "insert into history values(?,?,?,?,?)";
        private static final String _QueryBuscaRealtime = "select * from realtime";
        private static final String _QueryDeletarRealtime = "delete from realtime where PointTag = ?" ;
        private static final String _QueryUpdate = "update realtime set PointTag = ?, Value = ?, DateTime = ?";
PreparedStatement ps1 = bd.getConnection().prepareStatement(_QueryBuscaRealtime);
           ResultSet rs1 = ps1.executeQuery();
           while(rs1.next()){
            RealTime realtime = new RealTime();
            realtime.setPointTag(rs1.getString(1));
            realtime.setValue(rs1.getString(2));
            realtime.setDataGravacao(rs1.getString(3));
            listaRealtime.add(realtime);
          }
          for(int j = 0; j < listaRealtime.size(); j++){
            real = (RealTime) listaRealtime.get(j);
            String dataGravacao = real.getDataGravacao();
            if (dataGravacao != null){
              ps = bd.getConnection().prepareStatement(_QueryDeletarRealtime);
              ps.setString(1,real.getPointTag());
              ps.executeUpdate();
              ps.close();
            }
          }
          ps1.close();
          for (int i = 0; i < lista.size(); i++) {
            ps = bd.getConnection().prepareStatement(_QueryDeGravacao);
            cfh = (PointCFH) lista.get(i);
            String pointTag = cfh.getPoint_CD_Tag();
            plc = Integer.parseInt(cfh.getRtu_CD_PlcAddr());
            func =Integer.parseInt(cfh.getPoint_CD_TypeAddr());
            ender = Integer.parseInt(cfh.getPoint_CD_PointAddr());
            qn_HiCount = Integer.parseInt(cfh.getPoint_QN_HiCount());
            qn_LoCount = Integer.parseInt(cfh.getPoint_QN_LoCount());
            qn_Md_Hieng = Double.parseDouble(cfh.getPoint_MD_Hieng());
            qn_Md_Loeng = Double.parseDouble(cfh.getPoint_MD_Loeng());
            nCnt = 0;
            while ( ( (ret = dFEP.LeValorTag(plc, func, ender)) < 0) && nCnt < 3) {
              Pause(1);
              nCnt++;
            }
            CurDataHora = Calendar.getInstance().getTime();
            if (ret != 1) {
              if (TestaRede.Ping(ip_fep) != 0){
                System.out.println("NET ERROR - " + CurDataHora.toString());
              }
              ps = bd.getConnection().prepareStatement(_QueryDeGravacao);
              ps.setString(1, cfh.getPoint_CD_Tag());
              ps.setDouble(2, 0);
              ps.setTimestamp(3, null);
              ps.executeUpdate();
              System.out.println("FAIL READ TAG PLC=" + plc + ";FNC=" + func +
                                 ";END=" + ender + " - " + CurDataHora.toString());
            } else {
                value = qn_Md_Loeng +
                        ( ( (qn_Md_Hieng - qn_Md_Loeng) / (qn_HiCount - qn_LoCount)) *
                        (ret - qn_LoCount));
                Date d = new Date();
                datatual = new Timestamp(d.getTime());
                ps.setString(1, cfh.getPoint_CD_Tag());
                ps.setDouble(2, value);
                ps.setTimestamp(3, datatual);
                ps.executeUpdate();
                ps.close();

                ps = bd.getConnection().prepareStatement(_QueryHistory);
                ps.setInt(1,0);
                ps.setString(2,cfh.getPoint_CD_Tag());
                ps.setTimestamp(3,datatual);
                ps.setDouble(4, value);
                ps.setString(5, cfh.getPoint_NM_Unit());
                ps.executeUpdate();
                ps.close();
            }
          }
          ps.close();
          bd.getConnection().close();
          }
          catch (ClassNotFoundException ex1) { }
          catch (SQLException ex1) {
            System.out.println(ex1.getErrorCode());
            ex1.printStackTrace();
W

a chave primaria das tabelas do banco é autonumerica?

R

Wonder

Não, não é autonumérica

W

e verdade dizer q todas as vezes q vc execulta esse codigo ele grava os dados na tabela com a mesma chave primaria?

se isso for verdade, ou vc cria chave primarias diferentes ou cria chaves primarias autonumericas

Criado 29 de setembro de 2004
Ultima resposta 30 de set. de 2004
Respostas 10
Participantes 3