Dúvida sobre GUI!

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”

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:

[code] 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!");
}[/code]

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! :wink:

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.

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

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

Vou ler muito obrigado!

[quote=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”

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:

[code] 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!");
}[/code]

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! ;)[/quote]

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

duplicou, foi mal =<

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

[code]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;
}

}
[/code]

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

[code]String q = “”;
q += “insert into table_1(telefone_1)”;
q += “values (’” +jtf.getText()+"’)";
sn.executeUpdate(q);

	jl3.setText("Cadastrado!");[/code]