Inserir dados no MySQL com JAVA

Queria saber como faço para enviar os dados da minha classe java para meu banco de dados MySQL. Eu desenvolvi 3 classes segue abaixo:

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

public class Banco {
    public Connection getConnection(){
        try{
            return DriverManager.getConnection("jdbc:mysql://localhost/teste","root","1234");
        }
        catch(SQLException e){
            System.out.println("Problemas na conexao com o banco de dados."+e);
        }
    } 
    
}

Classe cadastro

public class cadastro {
    private int id;
    private String nome;
    
    public int setid(int id){
        this.id=id;
    }
    public String setnome(String nome){
        this.nome=nome;
    }
    public void getid(){
        return this.id;
    }
    public void getnome(){
        retunr this.nome;
    }
     
}

Classe principal

public class ConectandoBanco {

        public static void main(String[] args) {
         cadastro c = new cadastro();
         
         String sql = "INSERT INTO cadastro(id,nome) VALUES (?,?)";
         
         c.setid(1);
         c.setnome("Fábio");
    }
}

Quais comandos falto inserir para que eu consiga enviar os dados para o Banco de Dados.

Cara procure exemplos na internet , tem aos montes ou aqui no guj mesmo … como este aqui

Boa tarde, vi o exemplo que vc me enviou, porém por ele, não é mostrado como trabalhar com Atributos, como as 3 classes que criei.

Você esqueceu de usar o PrepareStatement

[code]import factory.ConnectionFactory;
import modelo.Usuario;
import java.sql.*;
import java.sql.PreparedStatement;

public class UsuarioDAO {

private Connection connection;  



public UsuarioDAO(){  
    this.connection = new ConnectionFactory().getConnection();  
}  

public void adiciona(Usuario usuario){  

        String sql = "INSERT INTO usuario(nome,cpf,email,telefone) VALUES(?,?,?,?)";  

        try {  
            PreparedStatement stmt = connection.prepareStatement(sql);  

            stmt.setString(1, usuario.getNome());  
            stmt.setString(2, usuario.getCpf());  
            stmt.setString(3, usuario.getEmail());  
            stmt.setString(4, usuario.getTelefone());  

             stmt.execute();  
            stmt.close();  

        } catch (SQLException u) {  
            throw new RuntimeException(u);  
    }  
}  

} [/code]

Como assim eu deveria utilizar o PrepareStatement e em qual das classe.

Como funciona a Orientação a Objetos para fazer manipulação de dados?
Vamos dividir, Classes, Interfaces, Janelas.

As classes são divididas em:
Dados (onde contém os atributos de uma entidade)
Manipulação das tabelas (onde contém sql para manipulação de Inserir, Alterar, Excluir, Pesquisar etc)

Interface
Onde contém os métodos de uma determinada classe (Inserir, Alterar, Excluir, Pesquisar etc.)
Não confunda aqui só é o escopo do método, não é a codificação do método.

Janelas
São os frames de preenchimento de dados.

Ou seja, pelo que percebi você está no caminho, mas segue a dica, sempre padronize, para não haver dor de cabeça
caso o sistema crescer, enquanto é pequeno sem padrão é facil, mas depois, hunf…

Classes:
Classe de Conexao (exemplo: clsConexao)
Classe da Entidade (exemplo: clsClientes)
Classe de SQL (exemplo: clsSQLClientes)

Interface
Interface para classe de conexao (exemplo: interfaceConexao)
Interface para classe de SQL (exemplo: interfaceClientes)

A interface de conexão vao ter as funçoes de Conectar e Desconectar o banco de dados onde voce implementa na classe de Conexao
A interface de SQL você implementa na classe de clsSQLClientes onde vai ter a função de Inserir, Alterar, Excluir, Pesquisar etc…

Vida da POO…

CLASSE -> Conecta Banco -> usuario Abre Janela -> usuario Preenche os campos -> janela Passa dados pra Classe -> Janela recebe função cadastrar -> Classe executa função inserir -> usuario Fecha aplicação -> Classe desconecta Banco.

Na classe de cadastro, sobre o PrepareStatement segue o link abaixo.

Do jeito que vc ta fazendo tambem da certo, mas só falta voce usar o PrepareStatement
Achei uma apostila boa e simples facil de entender http://www.ricardoterra.com.br/files/resources/PALESTRA%20-%20Trabalhando%20com%20BD.pdf

2 curtidas

Exemplo:

[code]public interface interfaceClientes(){

   public void Inserir() ;
   public void Alterar(int ID) ;
   public void Excluir(int ID) ;

}[/code]

[code]public class clsClientes(){

  public static integer ID;
  public static String Nome;
  public static String Endereco;
  
  public integer getID(){
     return this.ID;
  }

 public String getNome(){
     return this.nome;
  }

 public String getEndereco(){
     return this.Endereco;
  }

 public void setID(integer ID){
     return this.ID = ID;
  }

 public void setNome(String nome){
     return this.Nome = nome;
  }

 public void setEndereco(String endereco){
     return this.Endereco = endereco;
  }

}[/code]

[code]

public class clsSQLClientes implements interfaceClientes(){

    //chama sua classe para fazer conexao com o banco
    clsConexao banco = new clsConexao();
    banco.conectar;

     public clsSQLClientes(){ } //metodo construtor

     public void Inserir(){

            //cria objeto
            clsClientes cliente = new clsClientes();

            String sql = "INSERT INTO Clientes(ID,Nome,Endereco) VALUES(?,?,?)";    

            try {    
                PreparedStatement stmt = connection.prepareStatement(sql);    

                stmt.setString(1, cliente.getID());    
                stmt.setString(2, cliente.getNome());    
                stmt.setString(3, cliente.getEndereco());   

                stmt.execute(); //executa comando   
                stmt.close();    

            } catch (SQLException u) {    
                throw new RuntimeException(u);    
            }    
        }

 

     public void Alterar(int ID){
          //bloco de codigo para realizar a alteração
     }

     public void Excluir(int ID){
          //bloco de codigo para realizar a exclusão
     }

}[/code]

2 curtidas

Fiz um tuto no meu blog

http://www.brunorota.com.br/blog/tutorial-criar-crud-em-java-com-jdbc-parte-1/

e

http://www.brunorota.com.br/blog/tutorial-criar-crud-em-java-com-jdbc-parte-1-final/

Falows

Muito obrigado pela contribuição de todos. Observando o exemplo acima citado por “charleston10” desenvolvi o código abaixo:

package clsprincipal;

import java.sql.*;

public class clsConexao {
    private Connection conecta;
    
   public clsConexao(){
       try{
           //classe responsável pela conexão
           Class.forName("com.mysql.jdbc.driver");
           //criar a conexão
           conecta = DriverManager.getConnection("jdbc:mysql://localhost/teste","root","1234");
       }
       catch(Exception e){
           System.out.println("Erro na conexão");     
   }
   } 
}
package clsprincipal;


public class clsClientes {
    public static int id;
    public static String nome;
    
    public void setid(int id){
        this.id=id;
    }
    public int getid(){
        return this.id;
    }
    public void setnome(String nome){
        this.nome=nome;
    }
    public String getnome(){
        return this.nome;
    }
    
}
package clsprincipal;


public interface interfaceClientes() {
    public void Inserir() ; 
    
}
package clsprincipal;

import com.mysql.jdbc.PreparedStatement;
import java.sql.SQLException;


public class clsSQLClientes implements interfaceClientes(){
     //chama sua classe para fazer conexao com o banco  
     clsConexao banco = new clsConexao();  
     
     //metodo construtor 
     public clsSQLClientes(){ }  
  
         public void Inserir(){  
  
                //cria objeto  
                clsClientes cliente = new clsClientes();  
  
                String sql = "INSERT INTO cadastro(id,nome) VALUES(?,?)";      
  
                try {      
                    PreparedStatement stmt = connection.prepareStatement(sql);      
  
                    stmt.setString(1, cliente.getid());      
                    stmt.setString(2, cliente.getnome());           
  
                    stmt.execute(); //executa comando     
                    stmt.close();      
  
                } catch (SQLException u) {      
                    throw new RuntimeException(u);      
                }      
            }  
    
}
package clsprincipal;

public class Clsprincipal {

    public static void main(String[] args) {
        clsClientes cliente = new clsClientes();
        
        cliente.setid(2);
        cliente.setnome("Ana");
        
}

A pergunta que tenho é a seguinte o que devo inserir na classe Clsprincipal para que seja possível inserir os dados (2,“Ana”) no meu Banco de Dados. Pelo que vi preciso inserir algum comando que chame a classe clsSQLClientes. Estou certo disso se sim qual comando seria este? Obrigado

Falta uma coisa…

[code]public class ConectandoBanco {

    public static void main(String[] args) {  
     cadastro c = new cadastro();  //essa classe so pega os dados, nada mais.
       
     String sql = "INSERT INTO cadastro(id,nome) VALUES (?,?)";  //esse comando ja tem em outra classe, pq repetir ??
       
     c.setid(1);  //certo
     c.setnome("Fábio");  //certo
}  

} [/code]

[code]
public class ConectandoBanco {

    public static void main(String[] args) {  
     
      cadastro c = new cadastro();  //objeto que so vai pegar os dados  
      c.setid(1);  //pegando os dados
      c.setnome("Fábio");  //pegando os dados´

      //agora cria o outro objeto pra fazer o cadastro
      clsSQLClientes tabela = new clsSQLClientes();
      tabela.Inserir();
      
}  

} [/code]

Fiz as modificações solicitadas por vc, porém, agora ta gerando um erro:

Segue abaixo as classes:

package clsprincipal;

public class Clsprincipal {

    public static void main(String[] args) {
        clsClientes cliente = new clsClientes();
        
        cliente.setid(2);
        cliente.setnome("Ana");
        
        clsSQLClientes tabela = new clsSQLClientes();
        tabela.Inserir();
           
}
package clsprincipal;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.sql.SQLException;


public class clsSQLClientes implements interfaceClientes(){
     //chama sua classe para fazer conexao com o banco  
     clsConexao banco = new clsConexao();  
     
     //metodo construtor 
     public clsSQLClientes(){ }  
  
         public void Inserir(){  
  
                //cria objeto  
                clsClientes cliente = new clsClientes();  
  
                String sql = "INSERT INTO cadastro(id,nome) VALUES(?,?)";      
  
                try {      
                    PreparedStatement stmt = Connection.prepareStatement(sql);      
  
                    stmt.setString(1, cliente.getid());      
                    stmt.setString(2, cliente.getnome());           
  
                    stmt.execute(); //executa comando     
                    stmt.close();      
  
                } catch (SQLException u) {      
                    throw new RuntimeException(u);      
                }      
            }  
    
}

Voce fez um importação incorreta.

substitui essa

import com.mysql.jdbc.PreparedStatement; 

por essa

import java.sql.PreparedStatement 

Nossa parece brincadeira fiz a modificação, mas ainda continua com erro. Estou te enviando todas as classes para que possa olhar. O problema ainda persiste como descrito abaixo:

Códigos

package clsprincipal;

import java.sql.*;

public class clsConexao {
    private Connection conecta;
    
   public clsConexao(){
       try{
           //classe responsável pela conexão
           Class.forName("com.mysql.jdbc.driver");
           //criar a conexão
           conecta = DriverManager.getConnection("jdbc:mysql://localhost/teste","root","1234");
            System.out.println("Conexão OK");
       }
       catch(Exception e){
           System.out.println("Erro na conexão");     
   }
   } 
}
package clsprincipal;

import java.sql.Connection;  
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

public class clsSQLClientes implements interfaceClientes() {
    
    //chama sua classe para fazer conexao com o banco    
     clsConexao banco = new clsConexao();    
       
     //metodo construtor   
     public clsSQLClientes(){ 
         
     }
    @Override
    public void Inserir() {
        //cria objeto    
                clsClientes cliente = new clsClientes();    
    
                String sql =  "insert into cadastro(id,nome)VALUES(?,?)";        
   
                try {     
                    PreparedStatement stmt = connection.prepareStatement(sql);
                            
    
                    stmt.setInt(1, cliente.getid());        
                    stmt.setString(2, cliente.getnome());             
    
                    stmt.execute(); //executa comando       
                    stmt.close();        
    
                } catch (SQLException u) {        
                    throw new RuntimeException(u);        
                }    
        
    }
    
    
}

Baseando o código da minha classe “clsSQLClientes.java” com o código abaixo que tinha vc já tinha postado

import factory.ConnectionFactory;    
import modelo.Usuario;    
import java.sql.*;    
import java.sql.PreparedStatement;    
    
public class UsuarioDAO {    
    
    private Connection connection;    
    
    
    
    public UsuarioDAO(){    
        this.connection = new ConnectionFactory().getConnection();    
    }    
    
    public void adiciona(Usuario usuario){    
    
            String sql = "INSERT INTO usuario(nome,cpf,email,telefone) VALUES(?,?,?,?)";    
    
            try {    
                PreparedStatement stmt = connection.prepareStatement(sql);    
    
                stmt.setString(1, usuario.getNome());    
                stmt.setString(2, usuario.getCpf());    
                stmt.setString(3, usuario.getEmail());    
                stmt.setString(4, usuario.getTelefone());    
    
                 stmt.execute();    
                stmt.close();    
    
            } catch (SQLException u) {    
                throw new RuntimeException(u);    
        }    
    }    
      
}   

Vejo que na minha classe não possui nada no construtor e não criei o atributo private Connection connection;

Graças e Graças agora sim tudo certo segue abaixo um exemplo de manipulação de dados com o MySQL com as classes. Considere que o Banco de Dados chama “teste” e possui uma tabela chamada cadastro com os campos(id, nome).

Classe principal

package clsprincipal;

public class Clsprincipal {

    public static void main(String[] args) {
        clsClientes cliente = new clsClientes();
        
        cliente.setid(3);
        cliente.setnome("Paula");
             
        clsSQLClientes tabela = new clsSQLClientes();
        tabela.Inserir();
           
}
}

Classe de Conexão

package clsprincipal;

import java.sql.*;

public class clsConexao {
    public Connection getConnection() {
        try {
            return DriverManager.getConnection("jdbc:mysql://localhost/teste", "root", "1234");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
}

classe cliente

package clsprincipal;


public class clsClientes {
    public static int id;
    public static String nome;
    
    public void setid(int id){
        this.id=id;
    }
    public int getid(){
        return this.id;
    }
    public void setnome(String nome){
        this.nome=nome;
    }
    public String getnome(){
        return this.nome;
    }
    
}

Interface

package clsprincipal;


public interface interfaceClientes{
    public void Inserir(); 
    
}

Classe utilizada para inserir os dados

package clsprincipal;

import java.sql.Connection;  
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

public class clsSQLClientes implements interfaceClientes() {
    
    //chama sua classe para fazer conexao com o banco
    Connection con = new clsConexao().getConnection();
          
     //metodo construtor   
     public clsSQLClientes(){ 
         
     }
   
    public void Inserir() {
        //cria objeto    
                clsClientes cliente = new clsClientes();    
    
                String sql =  "insert into cadastro(id,nome)VALUES(?,?)";        
   
                try {     
                    PreparedStatement stmt = con.prepareStatement(sql);
                            
    
                    stmt.setInt(1, cliente.getid());        
                    stmt.setString(2, cliente.getnome());             
    
                    stmt.execute(); //executa comando       
                    stmt.close();        
    
                } catch (SQLException u) {        
                    throw new RuntimeException(u);        
                }    
        
    }
    
    
}

Problema resolvido com os códigos postados acima. Obrigado a todas as contribuições. Uma dica que deixo de apostila:http://www.caelum.com.br/apostila-java-web/bancos-de-dados-e-jdbc/#2-9-inserindo-dados-no-banco

;]

Pessoal, estou com um problema no PreparedStatement, segue o código e explico o problema

@Override
    public void salvar(Contato cont) {
       Connection conn = this.getCon()//metodo que pega a conexão;
		PreparedStatement insereSt = null;
		String sql ="INSERT INTO Contato(Nome, Tel, Email, Dt_Cad, Obs) VALUES (?,?,?,?,?)";
		
		try{
			
		 insereSt = (PreparedStatement) conn.prepareStatement(sql)//erro nessa linha quando roda;
		 
		 insereSt.setString(1, cont.getNome());
		 insereSt.setString(2, cont.getTel());
		 insereSt.setString(3, cont.getEmail());
		 insereSt.setDate(4, cont.getData_cad());
		 insereSt.setString(5, cont.getObs());
		 
		 insereSt.executeUpdate();
		 
		}catch(SQLException e)
		{System.out.println("erro ao incluir"+e.getMessage());}
		
		finally
		{
			try{
				insereSt.close();	
			}catch(Throwable t)
			{System.out.println("erro ao fechar st"+t.getMessage());}
			
		}
    }

Estou vendo vários códigos de PreparedStatement, e em todos eles nessa linha:

 insereSt = (PreparedStatement) conn.prepareStatement(sql);

não tem esse CAST e se eu tiro esse CAST, o java manda refazer e reclama

e quando eu debugo o erro da exatamente nessa linha, ele nem entra nos setString.

alguem sabe o que pode ser?

Como estão os import?

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import cursojava.fit.banco.conexao.*;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

Edgard, qual é o erro? Se falar qual fica mais fácil. Pelo que vi aí só falta o ; onde você comentou.

esse ponto e virgula ai fico no comentário porque eu comentei quando coloquei o código aqui no fórum, no meu código esse comentário não existe, então o ponto e virgula ta certinho.

O primeiro problema é que nos códigos que vejo, nenhum tem esse CAST antes do conn.prepareStatement(sql); na linha 9
que tanto o netbeans quanto o eclipse tão mandando eu por.

se eu debugo, o primeiro erro (No operations allowed after connection closed.) da exatamente nessa linha 9

depois da outro erro (stnull) ao fechar o insereSt, linha 25

o que me parece é que esse CAST ta deixando o insereSt nulo