Duvida Atualização Dados Banco

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???

Tente se explicar melhor, por favor

qual e a sua duvida???

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

OK???

se a sua duvida e essa[quote]
Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada [/quote]

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

[quote=“Wonder”]se a sua duvida e essa[quote]
Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada [/quote]

pq vc não posta o seu codigo para pordemos ajuda-lo?[/quote]

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)

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…

[quote=“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…[/quote]

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 = ?";

[code] 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();[/code]

a chave primaria das tabelas do banco é autonumerica?

Wonder

Não, não é autonumérica

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