Dúvida sobre GUI!

7 respostas
RafaelCN

Boa Tarde galera, bom vim aqui pra tirar uma dúvida que tenho a alguns dias. Estou fazendo uma aplicação junto a um Banco de dados (MySQL), vocês até podem pensar que deveria ter postado em outra área mas é tudo integrado, então vamos lá!

A aplicação consiste em uma simples "lista telefônica"

[img]http://img15.imageshack.us/img15/4151/imagem1kgn.png[/img]

Onde no JTextField (1) que é o mais pequeno, vou colocar o telefone, e ele vai fazer o cadastro desse telefone no banco de dados, a minha dúvida é como passar o número para o banco de dados como parâmetro? Ele também vai ter a opção de buscar número, mas isso fica inválido nesse momento já que eu irei usar só o "Cadastrar telefone". Bom a dúvida sobre o GUI é que eu vou usar um ActionListener, quando apertar ele vai cadastrar, vou passar o código fonte para melhor entendimento:

public void actionPerformed(ActionEvent e) {
		Object o = e.getSource();
		if(o == jb2) {	
		try {
			incluir();
		    }catch (SQLException e1) {
			System.out.println(e1.getMessage());
			e1.printStackTrace();
		                         }
		             }
	} 
	public void incluir() throws SQLException {
		
		Connection cn = Conexao.getConnection();
		Statement sn = cn.createStatement(); 
		

		String q = "";
		q += "insert into table_1(telefone_1)";
		q += "values ()";
		sn.executeUpdate(q);
		
		jl3.setText("Cadastrado!");
	}

Para ficar mais focado, tirei a outra parte do código. Como podem ver, toda vez que eu clicar no jb2 ele irá cadastrar o número que eu defini em values:

String q = "";
                q += "insert into table_1(telefone_1)";
		q += "values (81487540)"; //não é meu telefone ;p
		sn.executeUpdate(q);

Eu queria saber como passar algum parâmetro para a função values?!
Exemplificando, eu irei escrever um telefone no JTextField e ele ira pegar esse valor e cadastrar no banco de dados, mas ainda não sei como "copiar" o valor do JTextField e passar como parâmetro para a função values?

Se quiserem o resto do código fonte só avisar que eu posto ele todo! ;)

7 Respostas

jeffev

Não sei se entendi direito, mas pelo o que entendi você precisa pegar o valor que esta digitado em um determinado campo de texto e depois gravar no banco.
Se for isso acho que você pega o nome do campo da seguinte forma

//salvando o conteudo do campo String s = nomeDoCampo.getText(); //chamando o método que salva no banco salvarTelefone (s);

OBS: não programo desktop, se não for assim me corrijam.

RafaelCN

Me deu uma ideia! Mas o difícil é que no campo:

diogozero

Você quer inserir o valor dentro desses parênteses, correto?

Se for isso, leia sobre PreparedStatements:
http://www.guj.com.br/articles/115
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

RafaelCN

Vou ler muito obrigado!

M
RafaelCN:
Boa Tarde galera, bom vim aqui pra tirar uma dúvida que tenho a alguns dias. Estou fazendo uma aplicação junto a um Banco de dados (MySQL), vocês até podem pensar que deveria ter postado em outra área mas é tudo integrado, então vamos lá!

A aplicação consiste em uma simples "lista telefônica"

[img]http://img15.imageshack.us/img15/4151/imagem1kgn.png[/img]

Onde no JTextField (1) que é o mais pequeno, vou colocar o telefone, e ele vai fazer o cadastro desse telefone no banco de dados, a minha dúvida é como passar o número para o banco de dados como parâmetro? Ele também vai ter a opção de buscar número, mas isso fica inválido nesse momento já que eu irei usar só o "Cadastrar telefone". Bom a dúvida sobre o GUI é que eu vou usar um ActionListener, quando apertar ele vai cadastrar, vou passar o código fonte para melhor entendimento:

public void actionPerformed(ActionEvent e) {
		Object o = e.getSource();
		if(o == jb2) {	
		try {
			incluir();
		    }catch (SQLException e1) {
			System.out.println(e1.getMessage());
			e1.printStackTrace();
		                         }
		             }
	} 
	public void incluir() throws SQLException {
		
		Connection cn = Conexao.getConnection();
		Statement sn = cn.createStatement(); 
		

		String q = "";
		q += "insert into table_1(telefone_1)";
		q += "values ()";
		sn.executeUpdate(q);
		
		jl3.setText("Cadastrado!");
	}

Para ficar mais focado, tirei a outra parte do código. Como podem ver, toda vez que eu clicar no jb2 ele irá cadastrar o número que eu defini em values:

String q = "";
                q += "insert into table_1(telefone_1)";
		q += "values (81487540)"; //não é meu telefone ;p
		sn.executeUpdate(q);

Eu queria saber como passar algum parâmetro para a função values?!
Exemplificando, eu irei escrever um telefone no JTextField e ele ira pegar esse valor e cadastrar no banco de dados, mas ainda não sei como "copiar" o valor do JTextField e passar como parâmetro para a função values?

Se quiserem o resto do código fonte só avisar que eu posto ele todo! ;)

Eu sou iniciante em Java, então é bem provável que alguma coisa esteja errada...
Mas quando vou utilizar conexão com BD de forma direta faço assim...

Connection conexao = null; //Sempre criar conexao fora do try
		try {
			Class.forName("com.mysql.jdbc.Driver");
			
			//Após o "mysql" vc deve colocar o caminho do seu BD, aqui eu deixei o padrão
			// como se o BD estivesse na máquina local
			
			conexao = DriverManager.getConnection
					("jdbc:mysql://localhost:3306/table_1","usuario", "senha");
			PreparedStatement executorDeComandos = 
				conexao.prepareStatement(
						"insert into table_1 (telefone_1) " +
						"values ('"+seuTextField.getText()+"')");
			

			int retorno = executorDeComandos.executeUpdate();
			
			if (retorno == 1){
				JOptionPane.showMessageDialog(null, "Telefone cadastrado com sucesso!");
			} else {
				JOptionPane.showMessageDialog(null, "Telefone não cadastrado!");
			}
			
		} catch (Exception ex) {
			JOptionPane.showMessageDialog(null, "Erro ao cadastrar o telefone.");
		} finally{
			try {
				conexao.close();
			} catch (SQLException e2) {
				e2.printStackTrace();
			}
		}

O melhor é criar uma outra classe para fazer a conexão;

public class BancoDeDados {

	private Connection conexao;
	private PreparedStatement executorDeComandos;
	
	public PreparedStatement abrirConexaoBanco(String comando){
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conexao = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/table_1", "usuario", "senha");
			executorDeComandos = conexao.prepareStatement(comando);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return executorDeComandos;
	}
	
	public void fecharConexao(){
		try {
			conexao.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

dai quando for fazer a conexão, faz assim;

BancoDeDados bancoDeDados = new BancoDeDados();
		PreparedStatement executorDeComandos = bancoDeDados.
			abrirConexaoBanco(
					"insert into table_1 (telefone_1) " +
						"values ('"+seuTextField.getText()+"')");
		try {
			ResultSet retorno = executorDeComandos.executeQuery();

			bancoDeDados.fecharConexao();
		} catch (Exception e) {
			e.printStackTrace();
		}

Só espero que esteja tudo certo x3

M

duplicou, foi mal =<

RafaelCN

Eu tenho uma classe só pra fazer conexão com banco de dados, mas está um pouco diferente do seu xD

class Conexao {
 
	public static String status = ""; //string que guarda o status da conexão
	
	public static Connection getConnection() {
		
		Connection con = null;
		
		try
		{
		Class.forName("com.mysql.jdbc.Driver").newInstance();
		String url = "jdbc:mysql://127.0.0.1/Telefones?user=root&password=123";
		con = DriverManager.getConnection(url);
		status = "Conexão feita com sucesso!";
		}catch(SQLException e) {
			status = e.getMessage();
		}catch(ClassNotFoundException e) {
			status = e.getMessage();
		}catch(Exception e) {
			status = e.getMessage();
		}
		return con;
	}
}

Vou fazer as devidas modificações para enviar os valores para o BD, obrigado!
Na verdade são duas formas de conexão, então eu deixei como está, só alterei a linha de comando

String q = "";
		q += "insert into table_1(telefone_1)";
		q += "values ('" +jtf.getText()+"')";
		sn.executeUpdate(q);
		
		jl3.setText("Cadastrado!");
Criado 21 de agosto de 2012
Ultima resposta 21 de ago. de 2012
Respostas 7
Participantes 4