Duvida em grava banco

eai galera, estou com a seguinte situaçao, tenhu uma tabela onde guardo os dados do pedido e outra com id FK onde armazeno os itens do pedido, ai criei um insert para armazeda os dados do pedido , e outro insert dentro de um laço for para armazena os itens do pedido, mas nao quer roda,

[code]public void gravarOS(Vendas v1) throws SQLException {
try{
String sql = “insert into vendadados(operacao, idcliente, totalbruto, totalliquido, idvendedor, idtipovenda, dataemissao, datavcto) values(?,?,?,?,?,?,?,?)”;

    PreparedStatement stmt = conexao.prepareStatement(sql);
    
    //stmt.setInt(1, p1.getId());
    stmt.setInt(1, v1.getOperacao());
    stmt.setInt(2, v1.getIdcliente());
    stmt.setFloat(3, v1.getTotalbruto());
    stmt.setFloat(4, v1.getTotalliquido());
    stmt.setInt(5, v1.getIdvendedor());
    stmt.setInt(6, v1.getIdtipovenda());
    stmt.setString(7, v1.getDataemissao());
    stmt.setString(8, v1.getDatavecto());
    
    for (int i=0;i<=v1.getMinhaLista().size();i++){
        try{
        String sqlPeca = "insert into vendaitens(idpeca, qtde) values(?,?)";
        PreparedStatement stmtPeca = conexao.prepareStatement(sqlPeca);
        stmtPeca.setInt(1, v1.getMinhaLista().get(i).getId());
        stmtPeca.setFloat(2, v1.getMinhaLista().get(i).getQtde());
        stmtPeca.execute();
        stmtPeca.close();
        }catch (SQLException ex){
        System.out.print(ex);
        }
    }
    JOptionPane.showMessageDialog(null, "salvo com SUcesso!");
    stmt.execute();
    stmt.close();
}catch (SQLException ex){
    System.out.print(ex);
}
}[/code]

DaitonJr, qual é o erro?

ele nao grava nada no laço FOR q fiz… so grava o primeiro insert

Qual a chave primaria (PK) da sua tabela de itens?, pode ser que o erro seja por causa da tentativa de gravacao da chave primaria. Se nao for isto, envie a configuracao das tabelas para uma melhor analise. Abracos

vou te enviar agora os codigos das duas tabelas, fiz no postgres

CREATE TABLE vendadados ( id serial NOT NULL, operacao integer, idcliente integer, totalbruto numeric, totalliquido numeric, idvendedor integer, idtipovenda integer, dataemissao character varying(12), datavcto character varying(12), CONSTRAINT vendadados_pkey PRIMARY KEY (id) )

CREATE TABLE vendaitens ( idi integer, idpeca integer, qtde integer, CONSTRAINT vendaitens_idi_fkey FOREIGN KEY (idi) REFERENCES vendadados (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION )

ele naum esta entrando no FOR…poste o codigo onde fica esse v1.getMinhaLista(), ou vela se ele retorna alguma coisa…

 aqui esta o BEANS 

[code]public class PecaListaVenda {
private int id;
private int idPeca;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getIdPeca() {
    return idPeca;
}

public void setIdPeca(int idPeca) {
    this.idPeca = idPeca;
}

public float getQtde() {
    return qtde;
}

public void setQtde(float qtde) {
    this.qtde = qtde;
}
private float qtde;

}[/code]

AQUI ONDE ELE CARREGA OS ATRIBUTOS

[code]PecaListaVenda pecaVenda = new PecaListaVenda();
pecaVenda.setIdPeca(p1.getId());
pecaVenda.setQtde(qtdeproduto);

    pecasListadas.add(pecaVenda);//AQUI EU ADD A pecaVenda dentro do arrayList[/code]

AQUI ONDE EU COPIO O ARRAYLIST PARA O V1.GETMINHALISTA

Vendas v1 = new Vendas(); //EU CRIEI UMA CLASSE PRA RECEBER ATRIBUTOS DA VENDA E INICIEI ELE //OBSERVAÇAO: AQUI NO OBJETO "VENDA" EXISTEM MAIS ATRIBUTOS MAS PUIS SO ESSE Q É O Q VC PEDIU v1.setMinhaLista(pecasListadas);//AQUI EU SETO A pecasListadas NO MINHA LISTA E MANDO PRA GRAVAR DaoVendas dao = new DaoVendas(); dao.gravarOS(v1);

qualquer duvida me fale

tem muita coisa estranha, mas vamos começar assim…coloque antes do FOR q naum funfa isso…

System.out.println(v1.getMinhaLista()) so pra ver o q esta vindo desse método, eu axo q vira 0, teste ae!

Daiton… cole o erro do Catch para que te ajude. Será mais rápido.

blz… vou tenta aqui agora e ja respondo

diegobilhalva nao esta dando erro de try catch… nao da erro algum, por isso estou achando mto estranho

luxu realemente… ele nao imprime nda… ele so mostra NULL, ele nao entra dentro do for intao neh? o q vc acha?

luxu eu fuçando aqui eu descobri, era que quando eu tinha criado o List PecasListada havia um erro pq nao criei ele como um arraylist, so q ele nao pega o id da primeira tabela pra ser chave estrangeira da tabela de itens ? vc pode me dar uma ideia d como fazer isso?

galera sao 1:29 da manha… custei mas consegui o queria fazer, so vim msm pra ninguem responder desnecessariamente aqui e ajuda em outra duvida ou assunto, valeu

Poderia postar a solução pra gente saber o que aconteceu =)

nao sei se era a forma mais simples de resolver… mas dpois de tanto pensar em cima disso eu usei um select max(id) na tabela da chave primaria, e com isso eu pegava o ultimo valor gravado e copiava pra tabela da chave estrangeira… qualquer duvida eu esclreço melhor

[code]public void gravarOS(Vendas v1) throws SQLException {
String sql = “insert into vendadados(operacao, idcliente, totalbruto, totalliquido, idvendedor, idtipovenda, dataemissao, datavcto) values(?,?,?,?,?,?,?,?)”;
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.setInt(1, v1.getOperacao());
stmt.setInt(2, v1.getIdcliente());
stmt.setFloat(3, v1.getTotalbruto());
stmt.setFloat(4, v1.getTotalliquido());
stmt.setInt(5, v1.getIdvendedor());
stmt.setInt(6, v1.getIdtipovenda());
stmt.setString(7, v1.getDataemissao());
stmt.setString(8, v1.getDatavecto());
JOptionPane.showMessageDialog(null, “salvo com SUcesso!”);
stmt.execute();
stmt.close();
// AQUI EU ACABEI DE GRAVAR O INSERT NA TABELA DA CHAVE PRIMARIA
//AGORA EU FIZ UM SELECT MTAX ID PRA PEGAR O ULTIMO ID PRA GRAVAR NA OUTRA TABELA DA CHAVE ESTRANGEIRA
// AI ESSE ID Q O SELECT MAX ME RETORNO EU UTILIZEI ELE PRA POR COMO CHAVE ESTRANGEIRA
String sqlPegaUltimoID = “SELECT MAX(id) id FROM vendadados”;
PreparedStatement stmtPegaUltimoID = this.conexao.prepareStatement(sqlPegaUltimoID);
ResultSet rs = stmtPegaUltimoID.executeQuery();

    while(rs.next()){
        List<PecaListaVenda> arraytemp= new ArrayList<PecaListaVenda>();
        arraytemp = (v1.getMinhaLista());
        int tempId = rs.getInt("id");
        System.out.print(tempId);
        //AI AGORA EU PEGUEI O ID(COMO CHAVE ESTRANGEIRA) E A LISTA DE PEÇAS QUE QUERO POR NA OUTRA TABELA E CRIEI UM METODO PRA GRAVA-LOS
        gravarTabelaChaveEstrangeira(tempId, arraytemp );
    }
    
    rs.close();
    stmtPegaUltimoID.close();

}
private void gravarTabelaChaveEstrangeira(int tempId, List<PecaListaVenda> arraytemp) throws SQLException {
    for (int i=0;i<=arraytemp.size();i++){

           String sqlPeca = "insert into vendaitens(idi, idpeca, qtde) values(?,?,?)";
           PreparedStatement stmtPeca = conexao.prepareStatement(sqlPeca);
           stmtPeca.setInt(1, tempId);
           stmtPeca.setInt(2, arraytemp.get(i).getIdPeca());
           stmtPeca.setFloat(3, arraytemp.get(i).getQtde());
           stmtPeca.execute();
           stmtPeca.close();

    }
}[/code]