Pelo o que eu entendi a classe DAO nada mais seria que um classe que fizesse toda a parte de conexão com o banco de dados.
Gostaria de saber se o codigo abaixo poderia ser considerado como uma classe DAO:
importjava.sql.*;publicclassBD{publicstaticConnectionconnection=null;publicstaticStatementstatement=null;publicstaticResultSetresultSet=null;publicstaticfinalStringDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";publicstaticfinalStringURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:/meubd/banco.mdb";/** * método que faz conexão com o banco de dados * retorna true se houve sucesso, ou false em caso negativo */publicstaticbooleangetConnection(){try{Class.forName(DRIVER);connection=DriverManager.getConnection(URL);statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);System.out.println("Conectou");returntrue;}catch(ClassNotFoundExceptionerro){erro.printStackTrace();returnfalse;}catch(SQLExceptionerro){erro.printStackTrace();returnfalse;}}/** * Fecha ResultSet, Statement e Connection */publicstaticvoidclose(){closeResultSet();closeStatement();closeConnection();}privatestaticvoidcloseConnection(){try{connection.close();System.out.println("Desconectou");}catch(SQLExceptionerro){erro.printStackTrace();}}privatestaticvoidcloseStatement(){try{statement.close();}catch(Exceptione){e.printStackTrace();}}privatestaticvoidcloseResultSet(){try{resultSet.close();}catch(Exceptione){e.printStackTrace();}}/** * Carrega o resultSet com o resultado do script SQL */publicstaticvoidsetResultSet(Stringsql){try{resultSet=statement.executeQuery(sql);}catch(SQLExceptionerro){erro.printStackTrace();}}/** * Executa um script SQL de atualização * retorna um valor inteiro contendo a quantidade de linhas afetadas */publicstaticintrunSQL(Stringsql){intquant=0;try{quant=statement.executeUpdate(sql);}catch(SQLExceptionerro){erro.printStackTrace();}returnquant;}}
Isso que você escreveu seria uma classe responsável por tratar com as conexões do BD: abrir, fechar, etc (muitas vezes chamada de fábrica de conexões)
Uma classe DAO é uma classe que "encapsula" a chamada ao banco de dados, ou seja, ao invés de fazer
insert into tbl_usuarios (nome, idade) values ('Andre', '35')
Utilizando o DAO você irá fazer algo como
Usuario andre = new Usuario();
andre.setNome("Andre");
andre.setIdade("35");
UsuarioDAO dao = new UsuarioDAO();
dao.insere(andre);
Existem diversos exemplos de código aqui no site, dê uma procurada na busca por DAO que irá encontrar vários tópicos
Além disso caso não conheça sugiro você a baixar a apostila da caelum que irá te ajudar a familiarizar com o DAO (entre outros conceitos)
abs
Luciano_Lopes
O DAO seria essa sua classe conexão ser chamada por outra classe e usada para fazer insert,update,etc como o colega citou ai em cima.
A
alucardmaas
Entao esta poderia ser considerada:
// Fig. 25.31: DisplayQueryResults.java// Exibe o conteúdo da tabela Authors no// banco de dados Books.importjava.awt.BorderLayout;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.sql.SQLException;importjavax.swing.JFrame;importjavax.swing.JTextArea;importjavax.swing.JScrollPane;importjavax.swing.ScrollPaneConstants;importjavax.swing.JTable;importjavax.swing.JOptionPane;importjavax.swing.JButton;importjavax.swing.Box;publicclassDisplayQueryResultsextendsJFrame{// driver JDBC e URL de banco de dadosstaticfinalStringJDBC_DRIVER="com.mysql.jdbc.Driver";staticfinalStringDATABASE_URL="jdbc:mysql://localhost/books";staticfinalStringUSERNAME="jhtp6";staticfinalStringPASSWORD="jhtp6";// consulta padrão seleciona todas as linhas de tabela authorsstaticfinalStringDEFAULT_QUERY="SELECT * FROM authors";privateResultSetTableModeltableModel;privateJTextAreaqueryArea;// cria o ResultSetTableModel e GUIpublicDisplayQueryResults(){super("Displaying Query Results");// cria o ResultSetTableModel e exibe tabela de banco de dadostry{// cria o TableModel para resultados da consulta SELECT * FROM authorstableModel=newResultSetTableModel(JDBC_DRIVER,DATABASE_URL,USERNAME,PASSWORD,DEFAULT_QUERY);// configura JTextArea em que o usuário digita consultasqueryArea=newJTextArea(DEFAULT_QUERY,3,100);queryArea.setWrapStyleWord(true);queryArea.setLineWrap(true);JScrollPanescrollPane=newJScrollPane(queryArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);// configura o JButton para enviar consultaJButtonsubmitButton=newJButton("Submit Query");// cria o Box para gerenciar o posicionamento da queryArea e do// submitButton na GUIBoxbox=Box.createHorizontalBox();box.add(scrollPane);box.add(submitButton);// cria o delegado JTable para tableModelJTableresultTable=newJTable(tableModel);// posiciona os componentes GUI no painel de conteúdoadd(box,BorderLayout.NORTH);add(newJScrollPane(resultTable),BorderLayout.CENTER);// cria evento ouvinte para submitButtonsubmitButton.addActionListener(newActionListener(){// passa consulta para modelo de tabelapublicvoidactionPerformed(ActionEventevent){// realiza uma nova consultatry{tableModel.setQuery(queryArea.getText());}// fim do trycatch(SQLExceptionsqlException){JOptionPane.showMessageDialog(null,sqlException.getMessage(),"Database error",JOptionPane.ERROR_MESSAGE);// tenta recuperar a partir da consulta de usuário inválida// executando consulta padrãotry{tableModel.setQuery(DEFAULT_QUERY);queryArea.setText(DEFAULT_QUERY);}// fim do trycatch(SQLExceptionsqlException2){JOptionPane.showMessageDialog(null,sqlException2.getMessage(),"Database error",JOptionPane.ERROR_MESSAGE);// assegura que a conexão de banco de dados está fechadatableModel.disconnectFromDatabase();System.exit(1);// termina o aplicativo}// fim do catch interno}// fim do catch externo}// fim do método actionPerformed}// fim da classe ActionListener interna );// fim da chamada para addActionListenersetSize(500,250);// configura o tamanho da janelasetVisible(true);// exibe a janela }// fim do trycatch(ClassNotFoundExceptionclassNotFound){JOptionPane.showMessageDialog(null,"MySQL driver not found","Driver not found",JOptionPane.ERROR_MESSAGE);System.exit(1);// termina o aplicativo}// fim do catchcatch(SQLExceptionsqlException){JOptionPane.showMessageDialog(null,sqlException.getMessage(),"Database error",JOptionPane.ERROR_MESSAGE);// assegura que a conexão de banco de dados está fechadatableModel.disconnectFromDatabase();System.exit(1);// termina o aplicativo}// fim do catch// dispõe da janela quando o usuário fecha o aplicativo (isso sobrescreve// o padrão de HIDE_ON_CLOSE)setDefaultCloseOperation(DISPOSE_ON_CLOSE);// assegura que a conexão de banco de dados é fechada quando usuário fecha o aplicativoaddWindowListener(newWindowAdapter(){// desconecta-se do banco de dados e sai quando a janela for fechadapublicvoidwindowClosed(WindowEventevent){tableModel.disconnectFromDatabase();System.exit(0);}// fim do método windowClosed }// fim da classe WindowAdapter interna );// fim da chamada a addWindowListener}// fim do construtor DisplayQueryResults// executa o aplicativopublicstaticvoidmain(Stringargs[]){newDisplayQueryResults();}// fim de main}// fim da classe DisplayQueryResults
Estou persistindo para poder para de misturar tudo e passar a usar uma boa pratica
Luciano_Lopes
Acho que ainda não, vou tentar te explicar melhor, você tem a classe que faz conexão com o banco, a classe model onde tem os campos da sua tabela, e a classe dao onde você vai pegar a classe da conexão+classe model,ou seja na sua classe dao vai ter insert,delete,update usandos os campos que você criou la na classe model, entendeu?Se sua classe tive essas caracteristicas então ela é dao.