Pegando dados do banco de dados MySql

Aeeeee, conseguiu o debug ne =D

Entao se voce olhar BEMMMMM diretinho, voce vai ver que nos seus 2 metodos voce ta executando o MESMO SELECT, logo, o resultado vai ser o mesmo e nunca vai mudar nada =D

[code]
public Cad_Cidades() {
initComponents();
Conexao conexao = new Conexao();
try {
PreparedStatement stmt = conexao.connection.prepareStatement(“select * from cidades”);
ResultSet rs = stmt.executeQuery();
rs.first();
tf_codigo.setText(rs.getString(“codigo”));
tf_nome.setText(rs.getString(“nome”));
rs.close();
} catch (Exception e) {
}

private void botao_proximoActionPerformed(java.awt.event.ActionEvent evt) {
try {
PreparedStatement stmt = conexao.connection.prepareStatement(“select * from cidades”);
ResultSet rs = stmt.executeQuery();
rs.next();
tf_codigo.setText(rs.getString(“codigo”));
tf_nome.setText(rs.getString(“nome”));
rs.close();
} catch (Exception e) {
}
} [/code]

Nas video-aulas do prof neri de hibernate ele ensina como fazer uma coisa desse tipo ae, ja te adianto, mete todo esse select num List, e depois nas acoes do botao proximo, nem precisa voce ficar fazendo consulta ao banco, basta iterar a List 8)

Vixi daii ta exigindo demais da minha sabedoria Rof20004 hahahah

Pior que eu troquei o rs.next(); por rs.last(); e apareceu a ultima linha do meu bd corretamente… pq sera q o Next nao vai? =//

Porque o .next é uma iteracao, experimente colocar ele dentro de um while(rs.next()) {} e faça o debug pra voce ver como ta vindo tudo.

Isso e trabalho de escola ?

nao, soh to estudando e tentando aprender…pq provavelmente vo precisar disso pra meu tcc daqui um tempo. =/

hummm, entao vou tentar escrever algum codigo pra voce, nao gosto de ficar dando codigo de mao beijada, geralmente o pessoal ta fazendo trabalho de escola e tal, antes nem ligava pra isso, mas depois vi que tem muito nego abusado, dai começou a me irritar. Tenso…

Posta ae suas classes, e se der, o seu projeto tb, porque acho que o problema nao e so ai nesses 2 metodos nao.

Entendo vc parceiro =) eu cheguei da faculdade agora, vou tentar melhorar um pouco, deixar com mais cara de Orientado a objeto pra ver se funciona. Caso nao consiga te peço ajuda xD

Ae pessoal, to seguindo em frente com meu programinha e achando mais obstaculos =)…

Agora eu quero inserir dados no banco de dados e meu codigo parece estar certinho, o unico problema eh que tento acessar os TextFields que estao na classe Cad_Cidades pela classe Conexao mas o eclipse acusa que os TextFields sao de acesso privado. Alguem sabe como posso resolver isso?

[code]public void adiciona(){
String sql = “insert into contatos (id,nome,uf) values (?,?,?,?)”;
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, Cad_Cidades.tf_codigo.getText());
stmt.setString(2, Cad_Cidades.tf_nome.getText());
stmt.setObject(3, Cad_Cidades.cb_uf.getSelectedItem());
stmt.execute();
stmt.close();

        } catch (Exception e) {
        }
    }[/code]

Obrigado!

jpedr0, aconselho também você usar a apostila da Caelum FJ-11, e também se quiser tem as vídeo-aulas da universidade XTI.

eu ja li essa apostila e to estudando a FJ-21 atualmente… Em nenhum lugar da apostila fala sobre mexer em interface grafica ou sobre como tirar o acesso “private” dos Textfields =) como q faço isso??? por favor

Coloca public antes de declara-los.

Ex.:

public JTextField textField = new JTextField();

Isto aqui deve te ajudar:

Primeiro crie uma classe Contato contendo Id, Nome e UF, e seus gets e sets.

Classe ContadoDAO:

[code]public void adiciona(Contato contato){

        String sql = "insert into contatos (id,nome,uf) values (?,?,?)";
        try {
             PreparedStatement stmt = connection.prepareStatement(sql);
             stmt.setString(1, contato.getId());
             stmt.setString(2, contato.getNome());
             stmt.setString(3, contato.getUf());
             stmt.execute();
             stmt.close();
             
        } catch (Exception e) {
        }
    }[/code]

Classe onde fica o teu código de Desktop, com os botões, actions, etc

O clicar o botão Adicionar, chame este método:

[code]public void actionAdicionarContatoNaBase() {

Contato contato = new Contato();

// aqui você troca meuId pelo lugar de onde está pegando o id, e etc
contato.setId(meuId);
contato.setNome(meuNome);
contato.setNome(minhaUF);

ContatoDAO dao = new ContadoDAO();
dao.adiciona(contato);
}[/code]

Depois mova todo o teu código de SQL e conexão com banco para esse ContadoDAO.

O problema eh q to usando o NetBeans…e essas declarações vêm bloqueadas…não dah pra editar. Tem como ?

Tem sim

Clica botao direito do mouse em cima do componente, e clica em Edit source code ou em portugues “Personalizar codigo”

La em baixo tem como voce mudar o modificador do componente, simples. Flw.

Vlw, consegui mudar o modificador de acesso mas continuou dando uns erros loucos, dai eu pensei numa outra alternativa que aparentemente está correta, mas os dados não tão sendo gravados e nem a mensagem de “gravado com sucesso” ta aparecendo =/

//CLASSE Cad_Cidades! private void botao_gravarActionPerformed(java.awt.event.ActionEvent evt) { String codigo = tf_codigo.getText(); String nome = tf_nome.getText(); Object uf = cb_uf.getSelectedItem(); conexao.adiciona(codigo, nome, uf); }

[code]//CLASSE Conexao!
public void adiciona(String codigo, String nome, Object uf){
String sql = “insert into contatos (id,nome,uf) values (?,?,?,?)”;
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, codigo);
stmt.setString(2, nome);
stmt.setObject(3, uf);
stmt.execute();
stmt.close();
JOptionPane.showMessageDialog(null, “Gravado com sucesso”);

        } catch (Exception e) {
        }
    }[/code]

Nesse exception, coloca alguma coisa para imprimir o erro.

E também da uma olhado no teu SQL, tá com 4 ?, mas somente 3 parâmetros.

Obrigado Bruno! Nao tinha reparado no erro na SQL e eh bem melhor deixar pra imprimir o erro…

Agora ta gravando com sucesso mas eu tenho q fechar e abrir o programa pra aparecer a nova cidade gravada. Eu teria que executar um “select * from cidades;” toda hora q eu gravar??

Depois de chamar o adiciona, adicione uma nova linha na tua JTable com os dados que você acabou de colocar.

Tente também adicionar um botão Atualizar, para ele fazer o select novamente e atualizar a tua tabela.

public void adiciona(String codigo, String nome, Object uf){ String sql = "insert into cidades (codigo,nome,uf) values (?,?,?)"; try { PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, codigo); stmt.setString(2, nome); stmt.setObject(3, uf); stmt.execute(); stmt.close(); JOptionPane.showMessageDialog(null, "Gravado com sucesso"); stmt = connection.prepareStatement("select * from cidades"); rs.first(); } catch (Exception e) { System.out.println(e); } }

private void botao_gravarActionPerformed(java.awt.event.ActionEvent evt) { String codigo = tf_codigo.getText(); String nome = tf_nome.getText(); Object uf = cb_uf.getSelectedItem(); conexao.adiciona(codigo, nome, uf); mostrar_dados(); }

public void mostrar_dados(){ try { tf_codigo.setText(conexao.rs.getString("codigo")); tf_nome.setText(conexao.rs.getString("nome")); cb_uf.setSelectedItem(conexao.rs.getString("uf")); } catch (Exception e) { } }

To gravando e logo depois atualizo com o “select * from cidades” o aplicativo volta pra primeira linha mas msmo assim a ultima linha que acabei de adicionar não aparece. Tem idéia do pq?? Soh fechando e abrindo o programa msmo pra aparecer…

(Gostaria de conseguir fazer sem adicionar um botao Atualizar.)