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
Minha duvida, é como devo fazer update nos dados, pois qdo executo o sistema pela segunda vez, dá um erro de chave duplicada
OK???
W
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?
R
rocharrv
“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
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
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
rocharrv
"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 = ?";
PreparedStatementps1=bd.getConnection().prepareStatement(_QueryBuscaRealtime);ResultSetrs1=ps1.executeQuery();while(rs1.next()){RealTimerealtime=newRealTime();realtime.setPointTag(rs1.getString(1));realtime.setValue(rs1.getString(2));realtime.setDataGravacao(rs1.getString(3));listaRealtime.add(realtime);}for(intj=0;j<listaRealtime.size();j++){real=(RealTime)listaRealtime.get(j);StringdataGravacao=real.getDataGravacao();if(dataGravacao!=null){ps=bd.getConnection().prepareStatement(_QueryDeletarRealtime);ps.setString(1,real.getPointTag());ps.executeUpdate();ps.close();}}ps1.close();for(inti=0;i<lista.size();i++){ps=bd.getConnection().prepareStatement(_QueryDeGravacao);cfh=(PointCFH)lista.get(i);StringpointTag=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));Dated=newDate();datatual=newTimestamp(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(ClassNotFoundExceptionex1){}catch(SQLExceptionex1){System.out.println(ex1.getErrorCode());ex1.printStackTrace();
W
Wonder
a chave primaria das tabelas do banco é autonumerica?
R
rocharrv
Wonder
Não, não é autonumérica
W
Wonder
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