Duvida classe DAO

24 respostas
M

Oiii gente! Estou fazendo uma loja, ja fiz o sql (postgresql) são 3 tabelas: Cliente,Pedido e Produto. (a tabela pedido contém as fk de cliente e produto)
Logo fiz as 3 classes em java, sendo que a classe pedido terá um objeto cliente e um objeto produto para saber quem comprou o que, fiz uma classe também
para conectar ao banco de dados (postgresql) e está funcionando, ja testei e consigo ver as tabelas certinho no eclipse.
Minha dúvida, tenho que criar uma classe DAO para cada uma delas? (clienteDao,PedidoDAO e ProdutoDAO)
O programa apenas tem que mostrar o pedido, contendo o cliente e o produto. Fiz alguns inserts, selects e um update. Gostaria se possível que me ajudassem
a montar a classe DAO.

Obrigada e beijokas!

24 Respostas

C

Você pode criar um Dao Generico, para o seu projeto, e depois se for necessário criar Daos Especificos, foi o que eu fiz no meu projeto de monografia, mas acabei tendo que criar Daos espeficos para todas minhas classes.

A

De um jeito ou de outro você terá que criar DAOs específicos, eu também to usando na minha monografía, então como nosso amigo acima falou , você pode criar um DAO Genérico e os específicos.

C

neste post que criei tem o DAO Generico que eu criei, dá uma olhada

http://www.guj.com.br/posts/list/198258.java#995828

t+

M

"cvinicios e Anderson S."
Obrigada! Vou olhar e depois volto a postar aqui.
beijokas!

EDIT: Desculpa gente, mas eu achei meio pesado esse exemplo, complexo demais pra mim q sou meio burrinha … rs rs

D

Vc tem que criar uma tabela dos produtos no pedido, pois um pedido pode ter vários produtos.

M

douglastc, sim, no sql, a tabela Pedido contém as foreign keys de produto e cliente, era isso que você se referiu?
Obrigada!

D

Mariana.Vecci:
douglastc, sim, no sql, a tabela Pedido contém as foreign keys de produto e cliente, era isso que você se referiu?
Obrigada!

Mariana, o seu pedido tem vários produtos, como que ficaria a tabela Pedido? Um pedido tem vários produtos, é relacionamento 1 pra N, vc tem que criar uma tabela pra guardar os produtos do pedido.

F

pq ao inves do DAO vc num cria um MVC ??..Fica td mais facil e simples de manutencao…

ai ficaria assim.

//model
String sql = String.format("SELECT * FROM tabela WHERE cliente = '%s' ", textfieldCliente.getText()); //sua string sql para execucao...vc pode criar no form ou em metodos ou em classe,,,muito melhor de manipular.

//view
textfieldCliente.setText("nome do cliente"); //seu form propriamente dito

//controller, classe de execucao dos seus sql ...aqui vc pode fazer td de uma vez so, conectar, desconectar e executar sql no bd postgresql q escolheu.
public void executaSQL(String sql){ //metodo que executa seus sql use PreparedStatement ou Statement
PreparedStatement stm = conexao.PreparedStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stm.executeQuery();
}

…Com DAO vc precisa mandar a sua classe inteira tipo…Cliente cliente, eu acho meio trabalhoso pq tem q reescrever d+++, mas com MVC fica concluido…Dessa maneira vc centraliza a execucao dos seus SQL na msma classe, onde ele recebe uma string para executar o sql que precisa, SELECT, INSERT, UPDATE e DELETE…Sendo assim, vc sabe onde td acontece sempre.

M

fernandopaiva: Oii, é que sou obrigada a fazer com DAO… rs rs…
douglastc: Entendi agora o que você falouu, mas a tabela auxiliar não é quando é uma relação de n pra n?

C

Mariana Você ta usando Hibernate? pq se não estiver vc pode usar o mesmo esquema de Daos mas colocar mais parametros ao invés de passar um objeto, assim:

public void adicionar(Long id, String nome, String endereco, ....){

//sql de inserção
}

não seria um modo muito legal, vc teria que criar Daos especificos, e te daria muita mais trabalho do que usando o hibernate, além de dificultar a manutenção.

ou vc pode passar somente o objeto e depois monstar um sql com os propiedades dele sem usar o hibernate.

OBS: Os Daos fazem parte do modelo MVC, são os repositórios de dados.

M
cvinicios: Não estou, o banco de dados é o postgresql. achei um exemplo na internet e o modifiquei para o meu programa, mas não funciona.. rs rs.. classe para conectar ao banco:
import java.sql.Connection;  
 import java.sql.DriverManager;  
 import java.sql.SQLException;  
   
 public class ConFactory {  
      
    public static final int POSTGRESQL = 0;  
    private static final String POSTGRESQLDriver = "org.postgresql.Drive";  
   
    public static Connection conexao(String url, String nome, String senha,  
         int banco) throws ClassNotFoundException, SQLException {  
       switch (banco) {        
       case POSTGRESQL:           
          Class.forName(POSTGRESQLDriver);  
          break;  
       }  
       return DriverManager.getConnection(url, nome, senha);  
    }
 }
clienteDAO
import java.sql.Connection;  
 import java.sql.ResultSet;  
 import java.sql.SQLException;  
 import java.sql.Statement;  
 import java.util.Vector;  
   
 import javax.swing.JOptionPane;  
   
 //import model.Pessoa;  
  
   
 public class ClienteDAO {  
    // Configura essas variáveis de acordo com o seu banco  
    private final String URL = "jdbc:postgresql://localhost:5432/LojaVideoGame",  
         NOME = "postgres", SENHA = "odraude6969";  
   
    private Connection con;  
    private Statement comando;  
   
    
    public Vector<Cliente> buscarTodos() {  
       conectar();  
       Vector<Cliente> resultados = new Vector<Cliente>();  
       ResultSet rs;  
       try {  
          rs = comando.executeQuery("SELECT * FROM cliente");  
          while (rs.next()) {  
             Cliente temp = new Cliente(0, NOME, NOME);  
             // pega todos os atributos da pessoa  
             temp.setCodc(rs.getInt("cod"));  
             temp.setNomec(rs.getString("nome"));  
             temp.setFonec(rs.getString("fone"));  
             resultados.add(temp);  
          }  
          return resultados;  
       } catch (SQLException e) {  
          imprimeErro("Erro ao buscar clientes", e.getMessage());  
          return null;  
       }  
    }  
   
    public Vector<Cliente> buscar(String codc) {  
      conectar();  
       Vector<Cliente> resultados = new Vector<Cliente>();  
       ResultSet rs;  
      try {  
          rs = comando.executeQuery("SELECT * FROM cliente WHERE codc LIKE '"  
                + codc + "%';");  
          while (rs.next()) {  
             Cliente temp = new Cliente(0, codc, codc);  
             // pega todos os atributos da pessoa  
             temp.setCodc(rs.getInt("cod"));  
             temp.setNomec(rs.getString("nome"));  
             temp.setFonec(rs.getString("fone"));   
             resultados.add(temp);  
          }  
          return resultados;  
       } catch (SQLException e) {  
          imprimeErro("Erro ao buscar pessoa", e.getMessage());  
          return null;  
       }  
   
    }  
  
    public void insere(Cliente cliente){  
       conectar();  
       try {  
          comando.executeUpdate("INSERT INTO Cliente VALUES('"  
                + cliente.getCodc() + "', '" + cliente.getNomec() + "',"  
               + cliente.getFonec() + "')");  
          System.out.println("Inserida!");  
       } catch (SQLException e) {  
          imprimeErro("Erro ao inserir Cliente", e.getMessage());  
       } finally {  
          fechar();  
       }  
    }  
   
    private void conectar() {  
    	       try {  
              con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.POSTGRESQL);  
    	          comando = con.createStatement();  
    	          System.out.println("Conectado!");  
    	       } catch (ClassNotFoundException e) {  
    	          imprimeErro("Erro ao carregar o driver", e.getMessage());  
    	       } catch (SQLException e) {  
    	          imprimeErro("Erro ao conectar", e.getMessage());  
    	       }  
    	    }  
   
    private void fechar() {  
       try {  
          comando.close();  
          con.close();  
          System.out.println("Conexão Fechada");  
       } catch (SQLException e) {  
          imprimeErro("Erro ao fechar conexão", e.getMessage());  
       }  
    }  
   
    private void imprimeErro(String msg, String msgErro) {  
       JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
       System.err.println(msg);  
       System.out.println(msgErro);  
       System.exit(0);  
    }  
 }
erro
java.lang.NoClassDefFoundError: lojavideogame/SQLStatement
Caused by: java.lang.ClassNotFoundException: lojavideogame.SQLStatement
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
Exception in thread "main"
C

o projeto não esta encontrando a classe SQLStatement

tenta fazer o import java.sql.*;

obs: vc faz uma conexão a cada método e algumas vc não fecha, isso não é legal.

faça um método que verifique se a conexão já foi feita, caso não ele faz, se já foi feita ele devolve a conexão para o solicitante.

public static final Connection getConexao()
	{		
		// se não houver conexao "cria"
		if (con==null)
		{
			conexao = new Conectar();		
		}
		// se já houver uma conexao ativa envia
		return con;
	}
M
Oii, aquela minha classe confactory não funciona, então vo usa a antiga:
import java.sql.*;

public class SQLStatement {

   public static void main(String args[]) { 

       
       String url = "jdbc:postgresql://localhost:5432/LojaVideoGame"; 

       Connection con; 

       String query = "select * from cliente"; 

       Statement stmt; 

       try { 

           Class.forName("org.postgresql.Driver"); 

       } catch(java.lang.ClassNotFoundException e) { 

           System.err.print("ClassNotFoundException: "); 

           System.err.println(e.getMessage()); 

       } 

       try { 

           con = DriverManager.getConnection(url,"postgres", "odraude6969"); 

           stmt = con.createStatement(); 

           ResultSet rs = stmt.executeQuery(query); 

           ResultSetMetaData rsmd = rs.getMetaData(); 

           int numberOfColumns = rsmd.getColumnCount(); 

           int rowCount = 1; 

           while (rs.next()) { 

               System.out.println("Registro " + rowCount + ":  "); 

               for (int i = 1; i <= numberOfColumns; i++) { 

                   System.out.print("   Campo " + i + ":  "); 

                   System.out.println(rs.getString(i)); 

               } 

               System.out.println(""); 

               rowCount++; 

           } 

           stmt.close(); 

           con.close(); 

       } catch(SQLException ex) { 

           System.err.print("SQLException: "); 

           System.err.println(ex.getMessage()); 

       } 

   } 

}
Uma dúvida, aquele select no meio da classe de conectar não interfere nas classes DAO? EDIT: fechei ali a conexão que você estava falando ele acusou de criar um metodo na classe sqlstatement:
import java.sql.*;

public class SQLStatement {

   public static void main(String args[]) { 

       
       String url = "jdbc:postgresql://localhost:5432/LojaVideoGame"; 

       Connection con; 

       String query = "select * from cliente"; 

       Statement stmt; 

       try { 

           Class.forName("org.postgresql.Driver"); 

       } catch(java.lang.ClassNotFoundException e) { 

           System.err.print("ClassNotFoundException: "); 

           System.err.println(e.getMessage()); 

       } 

       try { 

           con = DriverManager.getConnection(url,"postgres", "odraude6969"); 

           stmt = con.createStatement(); 

           ResultSet rs = stmt.executeQuery(query); 

           ResultSetMetaData rsmd = rs.getMetaData(); 

           int numberOfColumns = rsmd.getColumnCount(); 

           int rowCount = 1; 

           while (rs.next()) { 

               System.out.println("Registro " + rowCount + ":  "); 

               for (int i = 1; i <= numberOfColumns; i++) { 

                   System.out.print("   Campo " + i + ":  "); 

                   System.out.println(rs.getString(i)); 

               } 

               System.out.println(""); 

               rowCount++; 

           } 

           stmt.close(); 

           con.close(); 

       } catch(SQLException ex) { 

           System.err.print("SQLException: "); 

           System.err.println(ex.getMessage()); 

       } 

   }

public static Connection conexao(String uRL, String nOME, String sENHA) {
	// TODO Auto-generated method stub
	return null;
}
import java.sql.Connection;  
 import java.sql.ResultSet;  
 import java.sql.SQLException;  
 import java.sql.Statement;  
 import java.util.Vector;  
   
 import javax.swing.JOptionPane;  
   
 //import model.Pessoa;  
  
   
 public class ClienteDAO {  
    // Configura essas variáveis de acordo com o seu banco  
    private final String URL = "jdbc:postgresql://localhost:5432/LojaVideoGame",  
         NOME = "postgres", SENHA = "odraude6969";  
   
    private Connection con;  
    private Statement comando;  
   
    
    public Vector<Cliente> buscarTodos() {  
       conectar();  
       Vector<Cliente> resultados = new Vector<Cliente>();  
       ResultSet rs;  
       try {  
          rs = comando.executeQuery("SELECT * FROM cliente");  
          while (rs.next()) {  
             Cliente temp = new Cliente(0, NOME, NOME);  
             // pega todos os atributos da pessoa  
             temp.setCodc(rs.getInt("cod"));  
             temp.setNomec(rs.getString("nome"));  
             temp.setFonec(rs.getString("fone"));  
             resultados.add(temp);  
          }  
          return resultados;  
       } catch (SQLException e) {  
          imprimeErro("Erro ao buscar clientes", e.getMessage());  
          return null;  
       }  
    }  
   
    public Vector<Cliente> buscar(String codc) {  
      conectar();  
       Vector<Cliente> resultados = new Vector<Cliente>();  
       ResultSet rs;  
      try {  
          rs = comando.executeQuery("SELECT * FROM cliente WHERE codc LIKE '"  
                + codc + "%';");  
          while (rs.next()) {  
             Cliente temp = new Cliente(0, codc, codc);  
             // pega todos os atributos da pessoa  
             temp.setCodc(rs.getInt("cod"));  
             temp.setNomec(rs.getString("nome"));  
             temp.setFonec(rs.getString("fone"));   
             resultados.add(temp);  
          }  
          return resultados;  
       } catch (SQLException e) {  
          imprimeErro("Erro ao buscar pessoa", e.getMessage());  
          return null;  
       }  finally {  
          fechar();  
       }  
   
    }  
  
    public void insere(Cliente cliente){  
       conectar();  
       try {  
          comando.executeUpdate("INSERT INTO Cliente VALUES('"  
                + cliente.getCodc() + "', '" + cliente.getNomec() + "',"  
               + cliente.getFonec() + "')");  
          System.out.println("Inserida!");  
       } catch (SQLException e) {  
          imprimeErro("Erro ao inserir Cliente", e.getMessage());  
       } finally {  
          fechar();  
       }  
    }  
   
    private void conectar() {  
    	       try {  
              con = SQLStatement.conexao(URL, NOME, SENHA);  
    	          comando = con.createStatement();  
    	          System.out.println("Conectado!");  
    	       } catch (SQLException e) {  
    	          imprimeErro("Erro ao conectar", e.getMessage());  
    	       }  
    	    }  
   
    private void fechar() {  
       try {  
          comando.close();  
          con.close();  
          System.out.println("Conexão Fechada");  
       } catch (SQLException e) {  
          imprimeErro("Erro ao fechar conexão", e.getMessage());  
       }  
    }  
   
    private void imprimeErro(String msg, String msgErro) {  
       JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
       System.err.println(msg);  
       System.out.println(msgErro);  
       System.exit(0);  
    }  
 }
J

fernandopaiva:
pq ao inves do DAO vc num cria um MVC ??..Fica td mais facil e simples de manutencao…

ai ficaria assim.

//model
String sql = String.format("SELECT * FROM tabela WHERE cliente = '%s' ", textfieldCliente.getText()); //sua string sql para execucao...vc pode criar no form ou em metodos ou em classe,,,muito melhor de manipular.

//view
textfieldCliente.setText("nome do cliente"); //seu form propriamente dito

//controller, classe de execucao dos seus sql ...aqui vc pode fazer td de uma vez so, conectar, desconectar e executar sql no bd postgresql q escolheu.
public void executaSQL(String sql){ //metodo que executa seus sql use PreparedStatement ou Statement
PreparedStatement stm = conexao.PreparedStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stm.executeQuery();
}

…Com DAO vc precisa mandar a sua classe inteira tipo…Cliente cliente, eu acho meio trabalhoso pq tem q reescrever d+++, mas com MVC fica concluido…Dessa maneira vc centraliza a execucao dos seus SQL na msma classe, onde ele recebe uma string para executar o sql que precisa, SELECT, INSERT, UPDATE e DELETE…Sendo assim, vc sabe onde td acontece sempre.

Isso vc chama de MVC? :roll:

F

A maneira como usa o Statement da muito trabalho, vc precisa trabalhar e concatenar muita string…com PreparedStatement fica mais facil veja.

// insere banco
Connection con = ClasseConexao.getConnection();
// Com PreparedStatement vc nao precisa de concatenar, basta passar o indice do campo para o PreparedStatement, fica mais limpo e facil de localizar os erros.
PreparedStatement stm = con.PreparedStatement("INSERT INTO tabela (nome, endereco, bairro, cidade) VALUES (?,?,?,?)"); 
stm.setString(1, nome.getText()); //indice 1
stm.setString(2, endereco.getText()); //indice 2
stm.setString(3, bairro.getText()); //indice 3
stm.setString(4, cidade.getText()); //indice 4
stm.execute();

//consulta banco
PreparedStatement stm = con.PreparedStatement("SELECT * FROM tabela WHERE nome LIKE ?  ORDER BY nome");
stm.getString(1, "%" + nome.getText() + "%"); //mandando a string pronta para o LIKE isso vai chegar assim %meunome%
ResultSet rs = stm.execute();
rs.next();
nome.setText(rs.getString("nome");

Dessa maneira vc evita ate o SQL Injection na aplicacao…ou ainda tente usar String.format

veja:

String sql = String.format("INSERT INTO tabela (codigo, nome,cidade) VALUES (%d ,'%s', '%s')", codigo.getText(), nome.getText(), cidade.getText()); //monta a string sql usando String.format

//metodo que executa seu sql
public void executaSQL(String sql){
    stm.executeQuery(sql);
}

Como eu disse, da para fazer um DAO ou MVC, depende de como quer trabalhar…Eu uso MVC, prefiro.

t+

J

fernandopaiva:
A maneira como usa o Statement da muito trabalho, vc precisa trabalhar e concatenar muita string…com PreparedStatement fica mais facil veja.

// insere banco
Connection con = ClasseConexao.getConnection();
// Com PreparedStatement vc nao precisa de concatenar, basta passar o indice do campo para o PreparedStatement, fica mais limpo e facil de localizar os erros.
PreparedStatement stm = con.PreparedStatement("INSERT INTO tabela (nome, endereco, bairro, cidade) VALUES (?,?,?,?)"); 
stm.setString(1, nome.getText()); //indice 1
stm.setString(2, endereco.getText()); //indice 2
stm.setString(3, bairro.getText()); //indice 3
stm.setString(4, cidade.getText()); //indice 4
stm.execute();

//consulta banco
PreparedStatement stm = con.PreparedStatement("SELECT * FROM tabela WHERE nome LIKE ?  ORDER BY nome");
stm.getString(1, "%" + nome.getText() + "%"); //mandando a string pronta para o LIKE isso vai chegar assim %meunome%
ResultSet rs = stm.execute();
rs.next();
nome.setText(rs.getString("nome");

Dessa maneira vc evita ate o SQL Injection na aplicacao…ou ainda tente usar String.format

veja:

String sql = String.format("INSERT INTO tabela (codigo, nome,cidade) VALUES (%d ,'%s', '%s')", codigo.getText(), nome.getText(), cidade.getText()); //monta a string sql usando String.format

//metodo que executa seu sql
public void executaSQL(String sql){
    stm.executeQuery(sql);
}

Como eu disse, da para fazer um DAO ou MVC, depende de como quer trabalhar…Eu uso MVC, prefiro.

t+

E quem disse que não dá pra usar DAO e MVC juntos?
Melhor, eles geralmente andam juntos…

A

Mariana.Vecci,
tava vendo ali atraz que vc ta usando uma classe de conexão com o banco muito complexa… eu tenho uma classe de conexão aqui bem simples vou postar ela pra você, e vou te mostrar um exemplo de como instancia-la dentro de um método de uma classe DAO qualquer… bjs!!! :twisted:
CLASSE DE CONEXÃO COM O BANCO

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

	// Método que irá estabelecer a conexao como o Banco de Dados
   public static Connection getConexao() throws SQLException{

	   try{
		// Aqui é o processo de se registrar o drive
		   Class.forName("org.postgresql.Driver");
		   System.out.println("Conectado ao banco");

		// Processo de estabelecer a conexão
		   return DriverManager.getConnection("jdbc:postgresql://localhost/Nome do Schema do Banco" , "Usuário" , "Senha");

		   // Tratamento de erro, caso ocorra algum!!
	   }catch(ClassNotFoundException e){

		   // Caso ocorra erro, irá aparecer uma mensagem
	   throw new SQLException(e.getMessage());
	   }

   }

}

UM EXEMPLO DE COMO UTILIZA-LA

import java.sql.*;

public class FulanoDAO{

          public void CadastrarFulano(String exemplo_Nome,String exemplo_Email) throws SQLException// Isso é só um exemplo
         {
              Connection conn = Conexao.getConexao();// CLASSE DE CONEXÃO COM O BANCO SENDO INSTANCIADA
              String sql = "INSERT INTO tabelaDoBanco(nome,email) VALUES(?,?)";
              PreparedStatement stmt = conn.PreparedStatement(sql);//É bem melhor utilizar o PreparedStatement
              stmt.setString(1,exemplo_Nome);
              stmt.setString(2,exemplo_Email);
            
             stmt.execute();
             stmt.close();
         }
}
M

Anderson S.: Obrigada! ajudou muito os teus exemplos!

A

Essa classe de conexão ai é simples e serve para qualquer banco, basta mudar os endereços, a parte da instancia, ou seja, abertura de uma conexão com o banco é bem simples você viu ai, eu sempre utilizo essa classe nas minhs aplicações, e o padrão DAO que uso é esse que você viu acima, quase não tenho erro nessa parte de persistencia… :mrgreen:

J

E vc já pensou em usar o Hibernate?

M

j0nny: Ja me ja me deram essa idéia, mas não sei usar … rs rs. .e também não é com hibernate o trabalho, é somente com o sql e os daos.

bom mais uma dúvida, to pensando nos daos mas não sei quais realmente serão necessários criar, basicamente o programa que pensei, teria que apenas exibir
o pedido mostrando o cliente e produto do mesmo, então, quais daos vcs me aconselham a criar? nada de muito complicado gente… rs rs… vamos devagar que demoro
pra entender :stuck_out_tongue:

beijokas

I

bom mais uma dúvida, to pensando nos daos mas não sei quais realmente serão necessários criar, basicamente o programa que pensei, teria que apenas exibir
o pedido mostrando o cliente e produto do mesmo, então, quais daos vcs me aconselham a criar? nada de muito complicado gente… rs rs… vamos devagar que demoro
pra entender

Mariana, quantas entidades vc precisa persistir?
uma explicação mais detalhada sobre DAO: http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/patterns/dao/
E aconselho a vc ler as apostilas FJ11 e FJ21 da caelum(www.caelum.com.br) que lhe ajudarão bastante nessa tarefa de entender como lidar com persistência(e mapeamento Objeto->Relacional quando necessário).

A

fernandopaiva:
A maneira como usa o Statement da muito trabalho, vc precisa trabalhar e concatenar muita string…com PreparedStatement fica mais facil veja.

// insere banco
Connection con = ClasseConexao.getConnection();
// Com PreparedStatement vc nao precisa de concatenar, basta passar o indice do campo para o PreparedStatement, fica mais limpo e facil de localizar os erros.
PreparedStatement stm = con.PreparedStatement("INSERT INTO tabela (nome, endereco, bairro, cidade) VALUES (?,?,?,?)"); 
stm.setString(1, nome.getText()); //indice 1
stm.setString(2, endereco.getText()); //indice 2
stm.setString(3, bairro.getText()); //indice 3
stm.setString(4, cidade.getText()); //indice 4
stm.execute();

//consulta banco
PreparedStatement stm = con.PreparedStatement("SELECT * FROM tabela WHERE nome LIKE ?  ORDER BY nome");
stm.getString(1, "%" + nome.getText() + "%"); //mandando a string pronta para o LIKE isso vai chegar assim %meunome%
ResultSet rs = stm.execute();
rs.next();
nome.setText(rs.getString("nome");

Dessa maneira vc evita ate o SQL Injection na aplicacao…ou ainda tente usar String.format

veja:

String sql = String.format("INSERT INTO tabela (codigo, nome,cidade) VALUES (%d ,'%s', '%s')", codigo.getText(), nome.getText(), cidade.getText()); //monta a string sql usando String.format

//metodo que executa seu sql
public void executaSQL(String sql){
    stm.executeQuery(sql);
}

Como eu disse, da para fazer um DAO ou MVC, depende de como quer trabalhar…Eu uso MVC, prefiro.

t+

Cara… você sabe o que é um DAO ??? Você sabe mesmo o que é MVC ???

J

Mariana.Vecci:
j0nny: Ja me ja me deram essa idéia, mas não sei usar … rs rs. .e também não é com hibernate o trabalho, é somente com o sql e os daos.

bom mais uma dúvida, to pensando nos daos mas não sei quais realmente serão necessários criar, basicamente o programa que pensei, teria que apenas exibir
o pedido mostrando o cliente e produto do mesmo, então, quais daos vcs me aconselham a criar? nada de muito complicado gente… rs rs… vamos devagar que demoro
pra entender :stuck_out_tongue:

beijokas

Bom, quanto ao hibernate, é muito simples de se usar, tem vários exemplos e apostilas na internet.
Bom, como já foi dada a dica, crie um DAO para cada entidade que vc quer persistir. Ex:
Tenho Produtos, Cliente e ItensProduto, então crie um ProdutosDao, ClientesDao e ItensPedidoDao

PS.: Não se deixe enganar com as pessoas que dizem que misturar Swing com SQL é MVC, MVC é TOTALMENTE o contrário disso, ok? :wink:

Criado 31 de outubro de 2010
Ultima resposta 2 de nov. de 2010
Respostas 24
Participantes 8