Utilizando Orientação a Objetos para implementar dados no banco de dados

Alterei tudo que poderia alterar pelos conhecimentos que tenho para resolver os erros, mas não funciona, vamos lá, vou lhes mostrar qual o meu problema.

[color=green]Esta classe está tudo OK, funcionando… [/color]

[code]
public class Estoque
{
private int idEstoque;
private String produto;
private double preco;

public void setIdEstoque(int idEstoque)
{ this.idEstoque = idEstoque;}

public void setProduto(String produto)
{ this.produto = produto;}

public void setPreco(double preco)
{ this.preco = preco;}


public int getIdEstoque()
{ return this.idEstoque;}

public String getProduto()
{ return this.produto;}

public double getPreco()
{ return this.preco;}

}[/code]

[color=red]Esta classe está dando erro ao compilar [/color]

import java.sql.*;
import java.util.List;
import java.util.ArrayList;

public class EstoqueDAO
{
    Connection Conn;
    Statement Stmt;
    ResultSet RS;
    
    EstoqueDAO()
    {
    	try
    	{
    		class.forName("org.gjt.mm.mysql.Driver").newInstance();
    		Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
    		Stmt = Con.createStatement();
    	}
    	catch(Exception E)
    	{
    		E.printStackTrace();
    	}
    }
    
    public boolean inserir (Estoque estoque)
    {
    	int x = 1;
    	
    	String query = "insert into estoque values (0,'"+estoque.getPreco()+"','"+estoque.getProduto()+"',1)";  
    		    	
    	try
    	{
    		x=Stmt.executeQuery(query);
    	}
    	catch(Exception E)
    	{
    		E.printStackTrace();
    	}
    	 if (x == 0)
    	 {
    	 	return false;
    	 }
    	   else
    	   {
    	    	return true;
    	   }
    }
}
/* 
Erros

--------------------Configuration: <Default>--------------------
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: <identifier> expected
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                 ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: invalid method declaration; return type required
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                  ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: illegal start of type
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: ';' expected
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                                                    ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:16: <identifier> expected
            Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
                ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:16: ';' expected
            Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
                                                                                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:17: <identifier> expected
            Stmt = Con.createStatement();
                ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: 'catch' without 'try'
        catch(Exception E)
        ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: ')' expected
        catch(Exception E)
                       ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: not a statement
        catch(Exception E)
             ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: ';' expected
        catch(Exception E)
                         ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:13: 'try' without 'catch' or 'finally'
        try
        ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: illegal start of expression
    public boolean inserir (Estoque estoque)
    ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: ';' expected
    public boolean inserir (Estoque estoque)
                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: ';' expected
    public boolean inserir (Estoque estoque)
                                           ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:48: reached end of file while parsing
}
Process completed.
*/

[color=red]Esta classe está dando erro também ao compilar… [/color]

import javax.swing.*;
public class CadastroEstoque
{
	public static void main(String args [])
	{
		Estoque estoque = new Estoque();
		
		estoque.setProduto("Bola de Futebol");
		estoque.setPreco("75.00");
		
		EstoqueDAO dao = new EstoqueDAO();
		JOptionPane.showMessageDialog(null,estoque.getNome());
	
	    if (dao.inserir(estoque))
        JOptionPane.showMessageDialog(null, "Gravou!");
        else
        	JOptionPane.showMessageDialog(null, "Não gravou!");
	}
}
/*Erros

--------------------Configuration: <Default>--------------------
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\CadastroEstoque.java:9: setPreco(double) in Estoque cannot be applied to (java.lang.String)
        estoque.setPreco("75.00");
               ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: <identifier> expected
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                 ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: invalid method declaration; return type required
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                  ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: illegal start of type
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:15: ';' expected
            class.forName("org.gjt.mm.mysql.Driver").newInstance();
                                                    ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:16: <identifier> expected
            Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
                ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:16: ';' expected
            Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
                                                                                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:17: <identifier> expected
            Stmt = Con.createStatement();
                ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: 'catch' without 'try'
        catch(Exception E)
        ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: ')' expected
        catch(Exception E)
                       ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: not a statement
        catch(Exception E)
             ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: ';' expected
        catch(Exception E)
                         ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:13: 'try' without 'catch' or 'finally'
        try
        ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: illegal start of expression
    public boolean inserir (Estoque estoque)
    ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: ';' expected
    public boolean inserir (Estoque estoque)
                          ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:25: ';' expected
    public boolean inserir (Estoque estoque)
                                           ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:48: reached end of file while parsing
}tudos em Casa\Java OO\JCreator\Projeto\CadastroEstoque.java:14: cannot find symbol
symbol  : method inserir(Estoque)
location: class EstoqueDAO
        if (dao.inserir(estoque))
               ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:16: cannot find symbol
symbol  : class Conn
location: class <error>
            Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","")
            ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:17: cannot find symbol
symbol  : class Stmt
location: class <error>
            Stmt = Con.createStatement();
            ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:17: cannot find symbol
symbol  : variable Con
location: class <error>
            Stmt = Con.createStatement();
                   ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:19: cannot find symbol
symbol  : variable E
location: class EstoqueDAO
        catch(Exception E)
                        ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:21: cannot find symbol
symbol  : variable E
location: class EstoqueDAO
            E.printStackTrace();
            ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:33: incompatible types
found   : java.sql.ResultSet
required: int
            x=Stmt.executeQuery(query);
                               ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:41: cannot return a value from method whose result type is void
            return false;
                   ^
I:\Estudos\Estudos em Casa\Java OO\JCreator\Projeto\EstoqueDAO.java:45: cannot return a value from method whose result type is void
                return true;
                       ^
27 errors

Process completed.
*/

Então pessoal como puderam observar as duas últimas classes deram muitos erros, fiquei desnorteado com isso, alguém pode dar uma força?

1 - Primeiro erro: não é class é Class.

2 - Segundo erro: tu passa uma String (“75.00”) mas ele espera um double, portanto basta fazer: estoque.setPreco(75.00);

[quote=nel]1 - Primeiro erro: não é class é Class.

2 - Segundo erro: tu passa uma String (“75.00”) mas ele espera um double, portanto basta fazer: estoque.setPreco(75.00);[/quote]

Valeu nel, dentro do “try”, era Class mesmo, retirou um monde de erros já, nesta classe.

Bom pessoal, resolvi um erro, e novos horizontes apareceram os outros foram fáceis de identificar, o caso é que determinado erro empata todo o aprendizado. Vou postar todas corrigidas (acredito eu) para que futuramente caso alguém precise de algo semelhante em seus problemas:

1° Classe

public class Estoque
{
	private int idEstoque;
	private String produto;
	private double preco;
	
	public void setIdEstoque(int idEstoque)
	{ this.idEstoque = idEstoque;}
	
	public void setProduto(String produto)
	{ this.produto = produto;}
	
	public void setPreco(double preco)
	{ this.preco = preco;}
	
	
	public int getIdEstoque()
	{ return this.idEstoque;}
	
	public String getProduto()
	{ return this.produto;}
	
	public double getPreco()
	{ return this.preco;}
}

2° Classe

import java.sql.*;
import java.util.List;
import java.util.ArrayList;

public class EstoqueDAO
{
    Connection Conn;
    Statement Stmt;
    ResultSet RS;
    
    EstoqueDAO()
    {
    	try
    	{
    		Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    		Conn = DriverManager.getConnection("jdbc:mysql://localhost/estoque","root","");
    		Stmt = Conn.createStatement();
    	}
    	catch(Exception E)
    	{
    		E.printStackTrace();
    	}
    }
    
    public boolean inserir (Estoque estoque)
    {
    	int x = 1;
    	
    	String query = "insert into estoque values (0,'"+estoque.getPreco()+"','"+estoque.getProduto()+"',1)";  
    		    	
    	try
    	{
    		x=Stmt.executeUpdate(query);
    	}
    	catch(Exception E)
    	{
    		E.printStackTrace();
    	}
    	 if (x == 0)
    	 {
    	 	return false;
    	 }
    	   else
    	   {
    	    	return true;
    	   }
    }
}

3° Classe

import javax.swing.*;
public class CadastroEstoque
{
	public static void main(String args [])
	{
		Estoque estoque = new Estoque();
		
		estoque.setProduto("Bola de Futebol");
		estoque.setPreco(75.00);
		
		EstoqueDAO dao = new EstoqueDAO();
		JOptionPane.showMessageDialog(null,estoque.getProduto());
	
	    if (dao.inserir(estoque))
        JOptionPane.showMessageDialog(null, "Gravou!");
        else
        	JOptionPane.showMessageDialog(null, "Não gravou!");
	}
}

Bom… Não deu nenhum erro de compilação, ainda está executando (demorado), caso venha a ocorrer um erro de execução peço ajuda casso necessário.

Como eu havia imaginado, ocorreria este erro, ao rodar:

java.sql.SQLException: Column count doesn’t match value count at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1355)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1270)
at EstoqueDAO.inserir(EstoqueDAO.java:33)
at CadastroEstoque.main(CadastroEstoque.java:14)

Process completed.

"insert into estoque values (0,'"+estoque.getPreco()+"','"+estoque.getProduto()+"',1)";

Você está inserindo 4 colunas (valores) na tabela estoque. Quantas colunas ela tem no banco?

felipeaps, este aqui é o meu banco atual.

Vê se funciona assim.

"insert into estoque values (" + estoque.getPreco() + "," + estoque.getProduto()+ ")";

E vc podia aprender a usar PreparedStatement.

Mas no caso aqui não sõa somente dois? “Preco” e “Produto”…

String query = "insert into estoque values (0,'"+estoque.getPreco()+"','"+estoque.getProduto()+"',1)";  

[quote=felipeaps]Vê se funciona assim.

"insert into estoque values (" + estoque.getPreco() + "," + estoque.getProduto()+ ")";

E vc podia aprender a usar PreparedStatement.[/quote]

Beleza, vou tentar aqui…

felipeaps, olha o que ocorreu agora.

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘de Futebol)’ at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1355)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1270)
at EstoqueDAO.inserir(EstoqueDAO.java:33)
at CadastroEstoque.main(CadastroEstoque.java:14)

Process completed.

Este PreparedStatemant é algum método parecido com o que estou usando, qual a vantagem?

Esqueci das aspas simples. Tenta assim.

"insert into estoque values (" + estoque.getPreco() + "," + "'" + estoque.getProduto() + "'" + ")";  

Sobre o preparedStatement: aqui

Uma pergunta, talvez alguém saiba (com certeza), então…

Se observarem na primeira classe, eu tenho um atributo idEstoque:

[code]public class Estoque
{
private int idEstoque; // Este aqui o qual me refiro
private String produto;
private double preco;

public void setIdEstoque(int idEstoque)
{ this.idEstoque = idEstoque;}

public void setProduto(String produto)
{ this.produto = produto;}

public void setPreco(double preco)
{ this.preco = preco;}


public int getIdEstoque()
{ return this.idEstoque;}

public String getProduto()
{ return this.produto;}

public double getPreco()
{ return this.preco;}

}[/code]

eu obrigatoriamente tenho que adiciona-lo no meu banco? Pois como você puderam observar na imagem eu tenho apenas dois campos, até havia outro, mas eu o apaguei, seu nome era “codigo”, achando que seria o possível erro, código ser diferente de idEstoque

esta faltando as aspas simples ao inserir no banco

"insert into estoque values ('" + estoque.getPreco() + "','" + estoque.getProduto()+ "')";

ve se funciona.

[quote=Galego Henrique]Uma pergunta, talvez alguém saiba (com certeza), então…

Se observarem na primeira classe, eu tenho um atributo idEstoque:

[code]public class Estoque
{
private int idEstoque; // Este aqui o qual me refiro
private String produto;
private double preco;

public void setIdEstoque(int idEstoque)
{ this.idEstoque = idEstoque;}

public void setProduto(String produto)
{ this.produto = produto;}

public void setPreco(double preco)
{ this.preco = preco;}


public int getIdEstoque()
{ return this.idEstoque;}

public String getProduto()
{ return this.produto;}

public double getPreco()
{ return this.preco;}

}[/code]

eu obrigatoriamente tenho que adiciona-lo no meu banco? Pois como você puderam observar na imagem eu tenho apenas dois campos, até havia outro, mas eu o apaguei, seu nome era “codigo”, achando que seria o possível erro, código ser diferente de idEstoque[/quote]

o nome da coluna do banco não tem que ser o mesmo nome do atributo da classe java.
tem que ser obrigatoriamente do mesmo tipo.

numeros - numeros;
String - varchar;

Mudei, agora foi o seguinte:

--------------------Configuration: --------------------
java.sql.SQLException: Incorrect integer value: ‘Bola de Futebol’ for column ‘preco’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1355)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1270)
at EstoqueDAO.inserir(EstoqueDAO.java:34)
at CadastroEstoque.main(CadastroEstoque.java:14)

Process completed.

No meu banco esta int no preco, e na classe estava double, mas mudei e continua o mesmo erro.

[quote=klebson lou][quote=Galego Henrique]Uma pergunta, talvez alguém saiba (com certeza), então…

Se observarem na primeira classe, eu tenho um atributo idEstoque:

[code]public class Estoque
{
private int idEstoque; // Este aqui o qual me refiro
private String produto;
private double preco;

public void setIdEstoque(int idEstoque)
{ this.idEstoque = idEstoque;}

public void setProduto(String produto)
{ this.produto = produto;}

public void setPreco(double preco)
{ this.preco = preco;}


public int getIdEstoque()
{ return this.idEstoque;}

public String getProduto()
{ return this.produto;}

public double getPreco()
{ return this.preco;}

}[/code]

eu obrigatoriamente tenho que adiciona-lo no meu banco? Pois como você puderam observar na imagem eu tenho apenas dois campos, até havia outro, mas eu o apaguei, seu nome era “codigo”, achando que seria o possível erro, código ser diferente de idEstoque[/quote]

o nome da coluna do banco não tem que ser o mesmo nome do atributo da classe java.
tem que ser obrigatoriamente do mesmo tipo.

numeros - numeros;
String - varchar;[/quote]

Estão com os mesmos tipos de dados, mas será que está dando este erro por causa de não ter uma chave primária no meu banco?

[quote=Galego Henrique]Mudei, agora foi o seguinte:

--------------------Configuration: --------------------
java.sql.SQLException: Incorrect integer value: ‘Bola de Futebol’ for column ‘preco’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1355)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1270)
at EstoqueDAO.inserir(EstoqueDAO.java:34)
at CadastroEstoque.main(CadastroEstoque.java:14)

Process completed.

No meu banco esta int no preco, e na classe estava double, mas mudei e continua o mesmo erro.[/quote]

este erro é que você esta incerindo uma String ‘bola de futebol’ em uma coluna preco que é interger - numero.

e é reconmedavel ter uma chave primaria no banco mas não é obrigatoria.

[quote=klebson lou]esta faltando as aspas simples ao inserir no banco

"insert into estoque values ('" + estoque.getPreco() + "','" + estoque.getProduto()+ "')";

ve se funciona.[/quote]

voce esta trocando a ordem coloca o produto depois o preco.

"insert into estoque values ('" + estoque.getProduto() + "','" + estoque.getPreco()+ "')";

Eu apaguei meu banco e criei novamente, só com os campos “Produto” e “Preco”, sinceramente não entendi o objetivo da minha professora em colocar esse idEstoque