Personal I have a problem that I can not solve in Java.
The intention is to make the connection in a SQLite
database. But I can not do the insertion.
Take a look at the code, please.
package conexao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConexaoBD {
private Connection conecta;
public Connection getConnection(){
//avisando que o banco q vou utilizar é sqlite
try {
DriverManager.registerDriver(new org.sqlite.JDBC());
} catch (SQLException e) {
System.err.println("Problemas na hora de registrar driver");
System.err.println("Saindo...");
System.exit(1);
}
//Conectando no BD
try {
conecta = DriverManager.getConnection("jdbc:sqlite:estoque.sqlite");
} catch (SQLException e) {
System.out.println("Impossivel se conectar no BD");
System.exit(1);
}
return conecta;
}
}
Second class:
package entidades;
import java.sql.Statement;
import org.sqlite.SQLiteConnection;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import conexao.ConexaoBD;
public class Produto {
private String descricao;
private int estoque_minimo;
private int estoque_maximo;
public Produto(String descricao, int estoque_minimo, int estoque_maximo) {
super();
setDescricao(descricao);
setEstoque_minimo(estoque_minimo);
setEstoque_maximo(estoque_maximo);
Inserir();
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getEstoque_minimo() {
return estoque_minimo;
}
public void setEstoque_minimo(int estoque_minimo) {
this.estoque_minimo = estoque_minimo;
}
public int getEstoque_maximo() {
return estoque_maximo;
}
public void setEstoque_maximo(int estoque_maximo) {
this.estoque_maximo = estoque_maximo;
}
public void Inserir(){
ConexaoBD banco = new ConexaoBD();
Connection conecta = banco.getConnection();
//cria objeto
Produto p = new Produto(getDescricao(), getEstoque_minimo(), getEstoque_maximo());
try {
Statement stmt = conecta.createStatement();
//pegando o id maximo e somar mais um para adicionar o proximo produto
ResultSet result = stmt.executeQuery("SELECT MAX(id) FROM produto");
result.next();
int idProx = result.getInt("MAX(id)");
idProx++;
// System.out.println(idProx);
//Insere o produto
String sql = "INSERT INTO produto(id,descricao,estoque_minimo, estoque_maximo) VALUES('idProx','p.getDescricao()','p.getEstoque_minimo()','p.getEstoque_maximo()');";
stmt.executeUpdate(sql);
} catch (SQLException u) {
throw new RuntimeException(u);
}
}
}
Graphic Interface
package interface_grafica;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.WindowListener;
import java.sql.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.xml.crypto.Data;
import entidades.Produto;
public class Janela extends JFrame{
/*
JFRAME PRINCIAL
*/
private JMenuBar menuBar;
private JLabel status;
private JMenu menuProduto;
private JMenuItem addProduto, listarProduto;
/*
* Adicao de produto
*/
private JLabel labelDescricao, labelEstoqueMin, labelEstoqueMax;
private JTextField tDescricao, tEstoqueMin, tEstoqueMax;
private JButton btnSalvar;
private JPanel telaDeAdicao;
private void addPainelProduto() {
labelDescricao = new JLabel("Descrição");
labelEstoqueMin = new JLabel("Estoque mínimo");
labelEstoqueMax = new JLabel("Estoque Máximo");
tDescricao = new JTextField(20);
tEstoqueMin = new JTextField(10);
tEstoqueMax = new JTextField(10);
btnSalvar = new JButton("Salvar");
btnSalvar.addActionListener((e)->{
Produto produto = new Produto(tDescricao.getText(), Integer.parseInt(tEstoqueMin.getText()),
Integer.parseInt(tEstoqueMax.getText()));
status.setText(produto.toString());
});
telaDeAdicao = new JPanel(new FlowLayout());
telaDeAdicao.add(labelDescricao);
telaDeAdicao.add(tDescricao);
telaDeAdicao.add(labelEstoqueMin);
telaDeAdicao.add(tEstoqueMin);
telaDeAdicao.add(labelEstoqueMax);
telaDeAdicao.add(tEstoqueMax);
telaDeAdicao.add(btnSalvar);
}
private void constroiBarradeStatus() {
status = new JLabel("Status");
add(status, BorderLayout.SOUTH);
}
private void constroiMenu() {
menuBar = new JMenuBar();
menuProduto = new JMenu("Produto");
addProduto = new JMenuItem("Adicionar");
listarProduto = new JMenuItem("Listar");
addProduto.addActionListener((e)->{
status.setText("Adicionando Produtos");
add(telaDeAdicao);
});
listarProduto.addActionListener((e)->{
status.setText("Listando Produtos");
//nao implementado ainda
});
menuProduto.add(listarProduto);
menuProduto.add(addProduto);
menuBar.add(menuProduto);
setJMenuBar(menuBar);
}
}
For the product to be added I put in a graphical interface the fields that are passed by parameter after the user type and click SAVE, that is, the parameters will be passed in the ActionListener of the save button in the IG.
It's not working, does anyone know what it is?
ERROR:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at org.sqlite.core.CoreStatement. (CoreStatement.java:39) at org.sqlite.jdbc3.JDBC3Statement. (JDBC3Statement.java:21) at org.sqlite.jdbc4.JDBC4Statement. (JDBC4Statement.java:11) at org.sqlite.jdbc4.JDBC4Connection.createStatement (JDBC4Connection.java:41) at org.sqlite.jdbc3.JDBC3Connection.createStatement (JDBC3Connection.java:193) at org.sqlite.SQLiteConfig.apply (SQLiteConfig.java:123) at org.sqlite.core.CoreConnection. (CoreConnection.java:85) at org.sqlite.jdbc3.JDBC3Connection. (JDBC3Connection.java:26) at org.sqlite.jdbc4.JDBC4Connection. (JDBC4Connection.java:24) at org.sqlite.SQLiteConnection (SQLiteConnection.java:45) at org.sqlite.JDBC.createConnection (JDBC.java:114) at org.sqlite.JDBC.connect (JDBC.java:88) at java.sql.DriverManager.getConnection (Unknown Source) at java.sql.DriverManager.getConnection (Unknown Source) at connection.ConnectionBD.getConnection (ConnectionBD.java:25) at entities.Product.Insert (Product.java:50) to entities.Product. (Product.java:23) at entities.Product.Inserir (Product.java:53) to entities.Product. (Product.java:23) at entities.Product.Inserir (Product.java:53) to entities.Product (Product.java:23)
After that loop
at entities.Product.Insert (Product.java:53)
at entities.Product (Product.java:23)
and after a while to