Bom dia
Estou desenvolvendo uma aplicação com netbeans que faz cadastro em um BD, pesquisa que retorna valores do BD e imprimi um relatório com as informações do BD.
ja ta tudo funcionando belezinha porem se eu quiser imprimir o que acabei de cadastrar eu primeiro tenho que entrar na parte de pesquisa, selecionar a linha na jtbable para que a aplicação jogue os valores do banco no formulario junto com o campo que é minha chave primaria para ai sim eu conseguir imprimir.
o que eu gostaria de fazer é quando clicar no botao salvar alem do metodo de adicionar da minha classe dao ele tambem incluisse um metodo que pegaria a ultima linha criada no meu BD (ou seja o que eu acabei de gravar) e pegue o valor da minha chave primaria e jogue no meu formulario para assim poder imprimir sem ter que fazer todo o metodo de pesquisar e selecionar uma linha na tabela que recebeu o resultado da minha pesquisa.
ja quebrei a cabeça aqui mas nao consigo passar a logica para a programação.
alguem poderia me ajudar?
Você pode fazer diferente, antes de salvar o registro você pega o nextvalue da sua chave primaria, assim não precisará fezer uma nova consulta após salvar, visto que o restante dos dados voce ja tem.
Faça um método com o SQL correspondente ao banco que você utiliza.
vc poderia me auxiliar nisso sou iniciante em programação:)
Antes de você salvar o item você pode preenncher o id com sequencia vinda do banco veja o exemplo:
`public boolean incluirMovimento(Movimento movimento) throws ParseException {
try {
conn = ConnectionFactory.getConnection();
conn.setAutoCommit(false);
movimento.setIdMovimento(proximaSequencia());
sql = new StringBuilder();
sql.append("insert into movimento "
+ "(idmovimento, fk_evento, total, data_movimento, usuario, titulo, nome, endereco, cep, cidade, estado, cpf, email, telefone1, telefone2, bairro) "
+ "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
ps.executeUpdate();`
Voce cria o metodo pra buscar essa sequencia no banco, no meu caso utilizo o postgres, porem pode fazer isso em qualquer banco, pra isso você vai precisar do nome da sequencia criada:
` public int proximaSequencia() throws SQLException {
PreparedStatement psSequencia;
ResultSet rsSequencia;
int seqmovimento = 0;
sql = new StringBuilder();
sql.append("SELECT NEXTVAL('movimento_idmovimento_seq') as sqlmovimento");
psSequencia = conn.prepareStatement(sql.toString());
rsSequencia = psSequencia.executeQuery();
conn = ConnectionFactory.getConnection();
if (rsSequencia.next()) {
seqmovimento = rsSequencia.getInt("sqlmovimento");
}
return seqmovimento;
}`
estava dando uma olhada em outros forums e achei algo parecido:
porem nao consegui implementar
o que eu fiz foi isso aqui para o botao novo:
int x = 0;
String sql = "select max(OS)+1 from DESCONTAMINADOR";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
x= rs.getInt(sql);
jFTOS.setText(String.valueOf(x));
}
porem quando clico no botao gera esse erro:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at descontaminador.telas.Descontaminação.jBNovoActionPerformed(Descontaminação.java:2161)
at descontaminador.telas.Descontaminação.access$700(Descontaminação.java:49)
at descontaminador.telas.Descontaminação$7.actionPerformed(Descontaminação.java:492)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
vou tentar fazer o seu exemplo para ver se da certo e ja respondo
ja tentei implementar tbm com generatedkeys mas nao consegui
tentei executar o comando SQL "select nextval direto no bd porem nao reconhece esse comando
Consegui 
Pra resolver o problema do Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
era porque esqueci de importar a classe de conexão
public Descontaminação() {
initComponents();
this.conexao = Conexao.getConexao(); <--------
}
ai meu metodo ficou assim:
private void jBNovoActionPerformed(java.awt.event.ActionEvent evt) {
try {
// os jtextField.setText("") eu nao coloquei aki pq são muitos :) //
int x = 0;
String sql = "select max(OS)+1 as OS from DESCONTAMINADOR";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
x= rs.getInt("OS");
jFTOS.setText(String.valueOf(x));
}
} catch (SQLException ex) {
Logger.getLogger(Descontaminação.class.getName()).log(Level.SEVERE, null, ex);
}
vlw pela ajuda