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,
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
)
[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);
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
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]