Pessoal… estou com uma dúvida relacionada a lógica…
Tenho uma tabela onde gravo os registros… ai faço a verificação se um novo registro vai ser gravado, só que antes, se ele já estiver gravado, eu pego o registro já gravado e jogo em outra tabela (histórico).
A condição do Update na primeira tabela não sei como fazer, pois existem 3 campos que podem vir alterados (PK), e não sei como pegar este registro anterior e gravar na histórico antes de fazer o update.
abaixo como está meu código:
Aqui carrego a linha vinda de uma planilha do excel:
[code]
private Telecom carregarLinha(int nuLinhaAtual) {
ValoresPlanilhaEnum planilhaEnum = null;
Telecom linhaTelecom = new Telecom();
Cell[] celulas = sheet.getRow(nuLinhaAtual);
for (int nuCelulaAtual = 0; nuCelulaAtual < celulas.length; nuCelulaAtual++) {
Cell celula = celulas[nuCelulaAtual];
TelecomCelulasEnum celulaTelecom = TelecomCelulasEnum
.obterCelulaTelecom(nuCelulaAtual);
switch (celulaTelecom) {
case SIMCARD:
linhaTelecom.setSimcard(celula.getContents());
break;
case LINHA:
linhaTelecom.setLinha(celula.getContents());
break;
case APN_UTILIZADA:
planilhaEnum = ValoresPlanilhaEnum.obtervALORPorDesc(celula
.getContents());
linhaTelecom.setApnUtilizada(planilhaEnum.getCodigo());
break;
case CONTA:
linhaTelecom.setConta(celula.getContents());
break;
case OPERADORA:
planilhaEnum = ValoresPlanilhaEnum.obtervALORPorDesc(celula
.getContents());
linhaTelecom.setOperadora(planilhaEnum.getCodigo());
break;
case PLANO:
linhaTelecom.setPlano(celula.getContents());
break;
case STATUS_SIM_CARD:
planilhaEnum = ValoresPlanilhaEnum.obtervALORPorDesc(celula
.getContents());
linhaTelecom.setStatusSIMCard(planilhaEnum.getCodigo());
break;
case DATA_ATIVACAO:
TimeZone gmtZone = TimeZone.getTimeZone("GMT");
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
format.setTimeZone(gmtZone);
DateCell dataCell = (DateCell) celula;
String dataFormatada = format.format(dataCell.getDate());
linhaTelecom.setDtAtivacao(transformaData(dataFormatada));
break;
case FONTE:
planilhaEnum = ValoresPlanilhaEnum.obtervALORPorDesc(celula
.getContents());
linhaTelecom.setFonte(planilhaEnum.getCodigo());
break;
case STATUS_LINHA:
planilhaEnum = ValoresPlanilhaEnum.obtervALORPorDesc(celula
.getContents());
linhaTelecom.setStatusLinha(planilhaEnum.getCodigo());
break;
case IMSI:
linhaTelecom.setImsi(celula.getContents());
break;
case CONSUMO_DADOS:
linhaTelecom.setConsumoDados(celula.getContents());
break;
}
}
return linhaTelecom;
}[/code]
Aqui a DAO:
private static final String SQL_SIMCARD_UPDATE_CONTA = "UPDATE conta SET Numero = (?::varchar)::numeric, DataAlteracao = ? FROM simcard, plano, linha WHERE simcard.numeroConta = conta.numero AND conta.numero = linha.numeroConta AND conta.numero = plano.numeroConta AND conta.numero = (?::varchar)::numeric AND linha.numero = (?::varchar)::numeric AND simcard.numero = (?::varchar)::numeric";
private static final String SQL_SIMCARD_UPDATE_PLANO = "UPDATE plano SET NumeroConta = (?::varchar)::numeric, Nome = (?::varchar), DataAlteracao = ? FROM simcard, conta, linha WHERE simcard.numeroConta = conta.numero AND conta.numero = linha.numeroConta AND conta.numero = plano.numeroConta AND conta.numero = (?::varchar)::numeric AND linha.numero = (?::varchar)::numeric AND simcard.numero = (?::varchar)::numeric";
private static final String SQL_SIMCARD_UPDATE_LINHA = "UPDATE linha SET Numero = (?::varchar)::numeric, CodigoStatusLinha = (?::integer), NumeroConta = (?::varchar)::numeric, DataAtivacao = (?::date), DataAlteracao = ? FROM simcard, plano, conta WHERE simcard.numeroConta = conta.numero AND conta.numero = linha.numeroConta AND conta.numero = plano.numeroConta AND conta.numero = (?::varchar)::numeric AND linha.numero = (?::varchar)::numeric AND simcard.numero = (?::varchar)::numeric";
private static final String SQL_SIMCARD_UPDATE_SIMCARD = "UPDATE SIMCard SET Numero = (?::varchar)::numeric, CodigoStatusSIMCard = (?::integer), CodigoAPNProvisionada = (?::integer), CodigoFonteDados = (?::integer), CodigoOperadora = (?::integer), NumeroConta = (?::varchar)::numeric, IMSI = (?::varchar)::numeric, ConsumoDados = (?::varchar), DataAlteracao = ? FROM conta, plano, linha WHERE simcard.numeroConta = conta.numero AND conta.numero = linha.numeroConta AND conta.numero = plano.numeroConta AND conta.numero = (?::varchar)::numeric AND linha.numero = (?::varchar)::numeric AND simcard.numero = (?::varchar)::numeric";
Declaração na DAO:
[code]public boolean simCardUpdateTelecom(String simCard, String linha,
int apnUtilizada, String conta, int operadora, String plano,
int statusSIMCard, Date dtAtivacao, int fonte, int statusLinha,
String imsi, String consumoDados) {
boolean atualiza = false;
Connection conn = null;
PreparedStatement co = null;
PreparedStatement pl = null;
PreparedStatement li = null;
PreparedStatement sc = null;
try {
conn = ConnectionManager.obterConexao();
co = conn.prepareStatement(SQL_SIMCARD_UPDATE_CONTA);
co.setString(1, conta);
co.setTimestamp(2,
new java.sql.Timestamp(new java.util.Date().getTime()));
co.setString(3, conta);
co.setString(4, linha);
co.setString(5, simCard);
co.executeUpdate();
pl = conn.prepareStatement(SQL_SIMCARD_UPDATE_PLANO);
pl.setString(1, conta);
pl.setString(2, plano);
pl.setTimestamp(3,
new java.sql.Timestamp(new java.util.Date().getTime()));
pl.setString(4, conta);
pl.setString(5, linha);
pl.setString(6, simCard);
pl.executeUpdate();
li = conn.prepareStatement(SQL_SIMCARD_UPDATE_LINHA);
li.setString(1, linha);
li.setInt(2, statusLinha);
li.setString(3, conta);
li.setDate(4, new java.sql.Date((dtAtivacao).getTime()));
li.setTimestamp(5,
new java.sql.Timestamp(new java.util.Date().getTime()));
li.setString(6, conta);
li.setString(7, linha);
li.setString(8, simCard);
li.executeUpdate();
sc = conn.prepareStatement(SQL_SIMCARD_UPDATE_SIMCARD);
sc.setString(1, simCard);
sc.setInt(2, statusSIMCard);
sc.setInt(3, apnUtilizada);
sc.setInt(4, fonte);
sc.setInt(5, operadora);
sc.setString(6, conta);
sc.setString(7, imsi);
sc.setString(8, consumoDados);
sc.setDate(9, new java.sql.Date((dtAtivacao).getTime()));
sc.setString(10, conta);
sc.setString(11, linha);
sc.setString(12, simCard);
sc.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
ConnectionManager.fecharConexao(conn, null, co);
ConnectionManager.fecharConexao(conn, null, pl);
ConnectionManager.fecharConexao(conn, null, li);
ConnectionManager.fecharConexao(conn, null, sc);
}
return atualiza;
}[/code]