Olá amigos do GUJ
Estou tendo problemas na hora de inserir chave primaria da Tabela Compras para chave Estrangeira da Tabela Compras, usando o DAO.
Vou postar Detalhadamente os códigos das TAbelas e a Classe Dao onde esá o código de inserção. O BD é MySQL
Tabelas
CREATE TABLE `cliente` (
`idcliente` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(20) DEFAULT NULL,
PRIMARY KEY (`idcliente`)
)
CREATE TABLE `compra` (
`idcompra` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idcliente` int(10) unsigned NOT NULL,
`produto` varchar(10) DEFAULT NULL,
PRIMARY KEY (`idcompra`),
KEY `compra_FKIndex1` (`idcliente`),
CONSTRAINT `compra_ibfk_1` FOREIGN KEY (`idcliente`) REFERENCES `cliente` (`idcliente`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
Classe Logica De Compras
package Logica;
/**
*
* @author Douglas
*/
public class CompraBean {
private int idcompra;
private int idcliente;
private String produto;
public int getIdcliente() {
return idcliente;
}
public void setIdcliente(int idcliente) {
this.idcliente = idcliente;
}
public int getIdcompra() {
return idcompra;
}
public void setIdcompra(int idcompra) {
this.idcompra = idcompra;
}
public String getProduto() {
return produto;
}
public void setProduto(String produto) {
this.produto = produto;
}
}
Classe DAO de Compras
package CompraDAO;
import Conexao.ConexaoEstoque;
import Logica.CompraBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CompraDAO {
public void inserirCompra(CompraBean bean ,int idcliente) throws SQLException{
int idresult=0;
Connection con = ConexaoEstoque.getConexao();
PreparedStatement SQL;
try{
SQL = ConexaoEstoque.getConexao().prepareStatement("Select * from cliente where idcliente ='"+idcliente+"'",PreparedStatement.RETURN_GENERATED_KEYS);
//String sql = "Select * from cliente where nome ='"+idcliente+"'";
// PreparedStatement ps = con.prepareStatement(null);
ResultSet rs = SQL.getGeneratedKeys();
if(rs != null && rs.next()){
int lastIsertedId = rs.getInt("idcliente");
bean.setIdcliente(lastIsertedId);
//bean.setIdcliente(rs.getInt("idcliente"));
idresult = bean.getIdcliente();
}else{
System.out.println("Cliente não encontrado");
}
rs.close();
SQL.close();
}catch(SQLException e){
System.out.println("Erro de SQL" + e);
}
String sql2 = "insert into compra(idcliente,produto) values("+idresult+",?)";
try {
PreparedStatement ps2 = con.prepareStatement(sql2);
ps2.setString(1, bean.getProduto());
ps2.execute();
ps2.close();
} catch (SQLException e) {
System.out.println("Erro no SQL2" + e);
}
}
}
E no Botão Salvar do Formulário Compras
private void jBComprarActionPerformed(java.awt.event.ActionEvent evt) {
CompraBean compraBean = new CompraBean();
compraBean.setProduto(jTextField3.getText());
CompraDAO DAO = new CompraDAO();
try {
DAO.inserirCompra(compraBean, WIDTH);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"Erro ao Salvar" + ex);
}
}
Fiz umas Modificações ae buscando informações na net ma sei lá se é dessa forma…
E não sei se está certo este WIDHT no DAO.inserirCompra, me parece que passa outro parametro aee como int idcliente na Classe DAO…
Quando Salvo alguma Compra ele dá Este Erro:
Conectado ao Banco de Dados
Conectado ao Banco de Dados
Cliente não encontrado
Erro no SQL2com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (estoque
.compra
, CONSTRAINT compra_ibfk_1
FOREIGN KEY (idcliente
) REFERENCES cliente
(idcliente
) ON DELETE NO ACTION ON UPDATE NO ACTION)
Então Galera procurei tudo que é canto aki na Net e nada
Pelo amor de Deus preciso saber logo faço esta Bendita inserção para mim poder implementar no meu projeto de TCC.
Agradeço à todos que me ajudarem!!!