Erro no Insert MySQL

7 respostas
santospedroh

Pessoal na hora que eu vou inserir os dados no banco o NetBeans me retorna esse erro:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

segue abaixo o codigo do botão salvar do meu form:

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        ConectaBanco con_usuario;
        con_usuario = new ConectaBanco();
        con_usuario.OpenDB();

        try{
            String nome  = txtNome.getText();
            String desc  = txtDesc.getText();
            String valor = txtValor.getText();
          
                //Inseri os dados no banco
                String UsuarioInsert = "INSERT INTO tratamentos2 () VALUES (NULL,'"+nome+"','"+desc+"','"+valor+"')";
                con_usuario.stmt.execute(UsuarioInsert);
                JOptionPane.showMessageDialog(null,"Usuário cadastrado com sucesso!","Cadastrado!", JOptionPane.INFORMATION_MESSAGE);                
        }
        catch(SQLException erroSQL){
             JOptionPane.showMessageDialog(null,"Não foi possível cadastrar o usuário!", "Erro!", JOptionPane.ERROR_MESSAGE);             
        }
    }

Segue abaixo o código de conexao ao bando:

public class ConectaBanco {
    //Banco de dados localhost
    final private String driver = "com.mysql.jdbc.Driver"; // MySQL JDBC driver
    final private String mydatabase = "mr_tooth";
    final private String ip = "localhost";
    final private String port = "3306";
    final private String url = "jdbc:mysql://" + ip + ":" + port + "/" + mydatabase;
    final private String username = "root";
    final private String password = "root";

    private Connection conn;
    public Statement stmt;
    public PreparedStatement pstmt;
    public ResultSet rs;


    public boolean OpenDB(){

        boolean result = true;
        try{
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
            //JOptionPane.showMessageDialog(null,"Conectou :D");
            System.out.println("Conectou :D");
        }
        catch(ClassNotFoundException Driver){
             JOptionPane.showMessageDialog(null,"Driver não localizado: "+Driver);
             result = false;
        }
        catch(SQLException Fonte){
            JOptionPane.showMessageDialog(null,"Erro na conexão: "+Fonte);
            result = false;
        }
        return result;
    }

    public void CloseDB(){

        boolean result = true;
        try{
            conn.close();
            //JOptionPane.showMessageDialog(null,"Desconectou :D");
             System.out.println("Desconectou :D");
        }
        catch(SQLException Fechar){
            JOptionPane.showMessageDialog(null,"Não foi possivél fechar a conexão: "+Fechar);
            result = false;
        }
    }

    public void QuerySQL(String sql){
        try{           
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs   = stmt.executeQuery(sql);
        }
        catch(SQLException erroSQL){
             JOptionPane.showMessageDialog(null,"O comando SQL não funcionou: "+erroSQL+",  SQL passado: "+sql);
        }
    }
}

O engraçado é que em outros formularios eu consigo inserir os dados no banco normalmente usando essa mesma tecnica.

7 Respostas

Andre_Rosa

Bem, acho que isto responde sua pergunta:
http://javafree.uol.com.br/topic-861190-Conexao-javalangNullPointerException.html

santospedroh

Bom segui resolver… valeu!

:smiley:

Andre_Rosa

santospedroh:
Bom segui resolver… valeu!

:smiley:

Disponha.

santospedroh

To com outro problema na alteração de registro em um jtable…

carego em um jtable os dados de uma tabela do banco de dados. Eu quero selecionar uma a linha do registro q eu quero alterar, clicar no botão altera, e abrir a nova janela de alteração com os dados do resgistro q eu quero alterar.

segue o codigo do botão alterar:

int LinhaSelecionada = this.jTablePacientes.getSelectedRow();
        String cod = this.jTablePacientes.getValueAt(LinhaSelecionada, 0).toString();

        new AlteraPaciente(cod).setVisible(true);

segue o codigo da janela de alteração:

public class AlteraPaciente extends javax.swing.JFrame {
    ConectaBanco con_paciente;
    String cod;
    /** Creates new form JF_FichaPaciente */
    public AlteraPaciente(String cod) {
        initComponents();
        //Inicia a classe ConectaBanco
        con_paciente = new ConectaBanco();
        con_paciente.OpenDB();

        //Busca os dados do paciente a ser alterado pelo código do paciente
        con_paciente.QuerySQL("SELECT * FROM pacientes WHERE cod_paciente = '"+cod+"'");
        try{
            
            txtCodigo.setText(con_paciente.rs.getString("cod_paciente"));
            txtNome.setText(con_paciente.rs.getString("nome_pac"));
            txtRG.setText(con_paciente.rs.getString("rg_pac"));
            txtCPF.setText(con_paciente.rs.getString("cpf_pac"));
            txtNasc.setText(con_paciente.rs.getString("dtnasc_pac"));
            txtRua.setText(con_paciente.rs.getString("endereco_pac"));
            txtNumero.setText(con_paciente.rs.getString("numero_pac"));
            txtCidade.setText(con_paciente.rs.getString("cidade_pac"));
            txtEstado.setText(con_paciente.rs.getString("estado_pac"));
            txtTel.setText(con_paciente.rs.getString("telefone_pac"));
            txtCel.setText(con_paciente.rs.getString("celular_pac"));
            txtEmail.setText(con_paciente.rs.getString("email_pac"));
        }
        catch(SQLException erro){

        }
B

Desculpe, mas qual o erro?

santospedroh

A nova janela de alteração abre, mas não traz os dados do registro selecionado anteriormente no jtable… eu tentei enviar o codigo do regristo via parametro e fazer um select… mas naum funciona. :frowning:

B

Olha meu caro, eu to "brincando" com algo parecido.

O que eu fiz foi um Menu Geral, onde tem os ítens do menu, cada um com um ActionListener e eu chamo uma classe que extende a JFrame:

@Override
	public void actionPerformed(ActionEvent e) {
		
		System.out.println(e.getActionCommand());
		if (e.getActionCommand().equals("Centro Custo")) {
			new CadastroCentroCusto();
		}
		if (e.getActionCommand().equals("Empresa")) {
			new CadastroEmpresa();
		}
		if (e.getActionCommand().equals("Clientes")) {
			new CadastroClientes();
		}
	}
public class CadastroClientes extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 3422766898946128601L;

	CadastroClientes() {
		super("Cadastro de Clientes");
		initComponentes();
	}

	private void initComponentes() {
		System.out.println("initComponentes");

		CadastroClienteCNPJ cadCNPJ = new CadastroClienteCNPJ();
		CadastroClienteCPF cadCPF = new CadastroClienteCPF();
		
		JTabbedPane jtpTabs = new JTabbedPane();   

		jtpTabs.add(cadCPF.initComponentes(),"Cadastro Pessoa Física");
		jtpTabs.add(cadCNPJ.initComponentes(),"Cadastro Pessoa Juridica");
		
//		cadCNPJ.setVisible(true);
		
		this.add(jtpTabs);

		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setSize(370,700);
		//		setSize(1000,700);
		setVisible(true);
	}
}

Essas outras classes extends a JPanel.

Essas classes abrem um frame, que é o que você precisa, creio que nada implicaria em você criar um construtor diferente recebendo um double com o código único da sua tabela, e com esse código você fazer um select no teu banco de dados e obter o restante dos registros.
Mas poderia também enviar um arraylist ou uma string mesmo com todos os dados.

Desculpem se estou falando besteira... é que meu conhecimento não é tão grande assim.

Criado 24 de novembro de 2010
Ultima resposta 24 de nov. de 2010
Respostas 7
Participantes 3