Pessoal é o seguinte eu tenho q buscar o ultimo valor inserido no banco (para isso estou usando o Max) e depois q tenho esta informação eu cadastro em outra tabela. Está dando erro na hora de cadastrar no banco. Estou iniciando os meus estudos, desculkpe se fiz algo de errado:
Código:
// fiz um método para selecionar e depois fruto do valor eu cadastro em outra tabela
public void insertCruzamento(Aps bean) {
try {
String SQL2 = “select max (COD_APS) from APS”;
Connection conn1 = new Conexao().getConexao();
PreparedStatement ps1 = conn1.prepareStatement(SQL2);
ResultSet rs = ps1.executeQuery();
int codigo = rs.getInt(1);//acho q o erro está aqui
String sql = "insert into APSPROCED(COD_PROCEDIMENTO, COD_APS) values(?, ? )";
Connection conn = new Conexao().getConexao();
PreparedStatement ps = conn.prepareStatement(sql);//prepara
ps.setInt(1, bean.getcodProcedimento());
ps.setInt(2, codigo);
ps.execute();
JOptionPane.showMessageDialog(null, "APS cadastrado com sucesso!");
} catch (Exception e) {
//e.printStackTrace();
JOptionPane.showMessageDialog(null, "APS não cadastrada!", "ERRO!", JOptionPane.ERROR_MESSAGE);
}
}
qdo pressiono o botão para cadastrar uso:
v1.setcodProcedimento(codProced);
v1.insertCuzamento();
Obrigado!!!
Primeira coisa, qual a mensagem de erro? De preferência cole a stacktrace.
Deixa eu ver se entendi seu problema:
- Em algum ponto do sistema o usuário inclui um item A na tabela A. Com o código do item A você inclui um item B que tem uma Foreign key para o item A?
Ok!!
é isso mesmo!!! Eu cadastro os dados de uma guia e depois eu recupero o seu código (estou usando autoincrement) para cadastar em outra tabela o cod de procedimentos q estão inseridos em uma tabela. ficou meio confuso?
O programa está compilando porém não está cadastrando.
Pelo que entendi não dá nenhuma exception. O sistema simplesmente não grava no banco?
Revendo seu código, notei que você usa ps.execute numa clausula insert. Em insert, update e delete é melhor usar ps.executeUpdate() ao invés de ps.execute();
A conexão está com autocommit true ou false? Por que se estiver false você precisa fazer o commit para que ele persista no banco.
Outra coisa, você cadastra uma guia que contem vários códigos de procedimento, certo? Isso significa que se der problema enquanto você estiver salvando os procedimentos você não deveria nem gravar a guia.
É melhor você usar uma transação(porcamente explicando, um connection.setAutocommit(false); inicia uma transação ) e usar a mesma connection que cria a guia na que cria os procedimentos da guia, dando um connection.commit() depois de inserir todos os procedimentos.
falta isso:
ResultSet rs = ps1.executeQuery();
rs.next() //ta faltanndo um next() aqui
int codigo = rs.getInt(1);//acho q o erro está aqui