[MySQL][Jar] Problema fora da IDE

3 respostas
Revoke

Meu código funciona legal dentro da IDE (NetBeans) porem quando eu crio o arquivo .jar e executo obtenho os seguintes erros:

Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1
at cadastro.dao.ConnectionDataBase.getConnection(ConnectionDataBase.java:37)
at cadastro.dao.GenericDao.(GenericDao.java:17)
at cadastro.dao.DadosDao.(DadosDao.java:14)
at cadastro.controller.DadosController.listaDados(DadosController.java:65)
at cadastro.Principal.(Principal.java:33)
at cadastro.Cadastro.main(Cadastro.java:12)
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)
at com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1881)
at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3496)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2385)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:792)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:377)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(libgcj.so.11)
at java.sql.DriverManager.getConnection(libgcj.so.11)
at cadastro.dao.ConnectionDataBase.getConnection(ConnectionDataBase.java:27)
...5 more

Vou Colocar o código das Classes que aparentemente estão problemáticas

[color=red]Connection DataBase:[/color]

package cadastro.dao;

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

public class ConnectionDataBase {
	 
    private static final String URL_MYSQL = "jdbc:mysql://localhost:3306/hospital";
    private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    private static final String USER = "root";
    private static final String PASS = "lsa1234";

public static Connection getConnection() 
{
        System.out.println("Conectando ao Banco de Dados");
        
        try 
        {
            //Carrega o Driver do Banco
            Class.forName(DRIVER_CLASS);
            
            return DriverManager.getConnection(URL_MYSQL, USER, PASS);
            
        } 
        
        catch (ClassNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (SQLException e) 
        {
            throw new RuntimeException(e); //linha 37
        }
        return null;
    }
}

[color=red]
Generic Dao[/color]

package cadastro.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
	 
public abstract class GenericDao 
{
    private Connection connection;
    
    protected GenericDao() 
    { //linha 17
        this.connection = ConnectionDataBase.getConnection();
    }
    protected Connection getConnection() 
    {
        return connection;
    }
    
    protected void save(String insertSql, Object... parametros) throws SQLException 
    {
        PreparedStatement pstmt = getConnection().prepareStatement(insertSql);
	for (int i = 0; i < parametros.length; i++) 
        {
            pstmt.setObject(i+1, parametros[i]);
	}
        pstmt.execute();
        pstmt.close();
    }
	 
	    protected void update(String updateSql, Object id, Object... parametros) throws SQLException {
	    PreparedStatement pstmt = getConnection().prepareStatement(updateSql);
	    for (int i = 0; i < parametros.length; i++) {
	                pstmt.setObject(i+1, parametros[i]);
	    }
	    pstmt.setObject(parametros.length + 1, id);
	    pstmt.execute();
	    pstmt.close();
	    }
	 
	    protected void delete(String deleteSql, Object... parametros) throws SQLException {
	    PreparedStatement pstmt = getConnection().prepareStatement(deleteSql);
	    for (int i = 0; i < parametros.length; i++) {
	                pstmt.setObject(i+1, parametros[i]);
	    }
	 
	    pstmt.execute();
	    pstmt.close();
	    }
	}

[color=red]Dados Dao[/color]

package cadastro.dao;
import cadastro.model.Dados;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//linha 14
public class DadosDao extends GenericDao 
{
    public void salvar(Dados dados) throws SQLException 
    {
	        String insert = "INSERT INTO dados(nome, idade, data_nascimento,alergias, peso,altura,imagem)"
                        + "VALUES(?,?,?,?,?,?,?)";
	        save(insert, dados.getNome(), dados.getIdade(), dados.getDtNascimento(),dados.getAlergias(), dados.getPeso(), dados.getAltura(),dados.getImagem());
    }
	 
    public void alterar(Dados dados) throws SQLException 
    {
	        String update = "UPDATE dados " +
	                "SET nome = ?, idade = ?, data_nascimento = ?, alergias = ?, peso = ?, altura=?, imagem =? " +
	                "WHERE id = ?";
	        update(update, dados.getNome(), dados.getIdade(), dados.getDtNascimento(),dados.getAlergias(), dados.getPeso(), dados.getAltura(), dados.getImagem());
    }
	 
    public void excluir(long id) throws SQLException 
    {
        String delete = "DELETE FROM dados WHERE id = ?";
        delete(delete, id);
    }
	 
    public List<Dados> findDados() throws SQLException 
    {
        List<Dados> dadoss = new ArrayList<Dados>();

        String select = "SELECT * FROM dados";

        PreparedStatement stmt = getConnection().prepareStatement(select);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            
            Dados dados = new Dados();
            dados.setId(rs.getLong("id"));
            dados.setNome(rs.getString("nome"));
            dados.setIdade(rs.getString("idade"));
            dados.setDtNascimento(rs.getDate("data_nascimento"));
            dados.setAlergias(rs.getString("alergias"));
            dados.setPeso(rs.getString("peso"));
            dados.setAltura(rs.getString("altura"));
            dados.setImagem(rs.getString("imagem"));
            dadoss.add(dados);
        }

        rs.close();
        stmt.close();

        return dadoss;
    }
	 
    public Dados findByName(String nome) throws SQLException {
        String select = "SELECT * FROM dados WHERE nome = ?";
        Dados dados = null;
    PreparedStatement stmt = getConnection().prepareStatement(select);
        stmt.setString(1, nome);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            dados = new Dados();
            dados.setId(rs.getLong("id"));
            dados.setNome(rs.getString("nome"));
            dados.setIdade(rs.getString("idade"));
            dados.setDtNascimento(rs.getDate("data_nascimento"));
            dados.setAlergias(rs.getString("alergias"));
            dados.setAltura(rs.getString("altura"));
            dados.setPeso(rs.getString("peso"));
            dados.setImagem(rs.getString("imagem"));
        }

        rs.close();
        stmt.close();
        return dados;
}
  
    
}

[color=red]Dados Controller[/color]

package cadastro.controller;
import cadastro.dao.DadosDao;
import cadastro.model.Dados;
import javax.swing.*;
import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.awt.Component.*;
import java.awt.*;
import java.awt.Image.*;


public class DadosController 
{
	 
    private Date formatarData(String data) throws ParseException 
    {
        DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        return new Date( formatter.parse(data).getTime() );
    }
	 
    public void salvar(String nome, String idade, String dtNascimento,String alergias, String peso, String altura,String imagem) throws SQLException, ParseException 
    
    {
        Dados dados = new Dados();
        dados.setNome(nome);
	dados.setIdade(idade);
	dados.setDtNascimento(formatarData(dtNascimento));
        dados.setAlergias(alergias);
        dados.setAltura(altura);
        dados.setPeso(peso);
        dados.setImagem(imagem);
        new DadosDao().salvar(dados);
	    
    }
	 
    public void alterar(long id, String nome, String idade, String dtNascimento,String alergias, String peso, String altura,String imagem) throws ParseException, SQLException 
    {
        
        Dados dados = new Dados();
	dados.setId(id);
	dados.setNome(nome);
	dados.setIdade(idade);
	dados.setDtNascimento(formatarData(dtNascimento));
        dados.setAlergias(alergias);
        dados.setAltura(altura);
        dados.setPeso(peso);
        dados.setImagem(imagem);
        
	new DadosDao().alterar(dados);
	    }
    
    public List<Dados> listaDados() 
    {
        DadosDao dao = new DadosDao(); //linha 65
        try 
        {
            return dao.findDados();
	} 
        catch (SQLException e) 
        {
            
            JOptionPane.showMessageDialog(null, "Problemas ao localizar contato\n" + e.getLocalizedMessage());

        }
        
        return null;
	    
    }
	 
    public void excluir(long id) throws SQLException 
    {
	        
        new DadosDao().excluir(id);
	    
    }
    public Dados buscaContatoPorNome(String nome) throws SQLException 
    {
        
        DadosDao dao = new DadosDao();
        return dao.findByName(nome);
    }
    
//Esta função ainda não esta finalizada
    public void mostrarFoto(long id, String imagem){
        Image image = null;
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        image = toolkit.getImage(imagem);
        

        
    }
	
}
Principal (nao irei colocar o codigo pois aqui é apenas a criação do JFrame, mas vou colocar até a linha que contem o erro)
package cadastro;
import cadastro.model.Dados;
import cadastro.controller.DadosController;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.io.*;
import javax.imageio.*;

	 
public class Principal extends JFrame 
{
    
    private JLabel lbNome, lbIdade, lbDtNascimento, lbAlergias, lbAltura, lbPeso, lbImagem;
    private JTextField txtNome, txtIdade, txtDtNascimento,txtAlergias, txtAltura, txtPeso, txtLocalizar, txtImagem;
    private JFileChooser flImagem;
    private JButton btnSalvar, btnAlterar, btnExcluir, btnClear, btnLocalizar;
    private JButton btnPrimeiro, btnProximo, btnAnterior, btnUltimo, btnAbrir;
    private JButton btnCarregar;
    private List<Dados> contatoList = new DadosController().listaDados();  //linha 33
    private int registroAtual = 0;

3 Respostas

danielso2007

Executei a classe de conexão na IDE Eclipse, funcionou corretamente.

Qual a versão do banco e do conector?

Nos testes que eu fiz, usei o conector mysql-connector-java-5.1.17-bin.jar com o banco MySql 5.5.

Revoke

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.1.54-1ubuntu4 (Ubuntu)

Connector: mysql-connector-java-5.1.17

dentro da IDE funciona perfeito, ele salva as coisas no banco e tudo mais, problema ta sendo fora dela!

Revoke

Mudei um pouco o codigo do ConnectionDataBase para debuggar melhor, ele entrou no :
catch(SQLException)

e deu os seguintes erros agora

Exception in thread "main" java.lang.NullPointerException
at cadastro.dao.DadosDao.findDados(DadosDao.java:44)
at cadastro.controller.DadosController.listaDados(DadosController.java:68)
at cadastro.Principal.(Principal.java:33)
at cadastro.Cadastro.main(Cadastro.java:12)

Vou colocar os trechos importantes do codigo

[color=red]DadosDao (trecho findDados por volta da linha 44)[/color]

public List<Dados> findDados() throws SQLException 
    {
        List<Dados> dadoss = new ArrayList<Dados>();

        String select = "SELECT * FROM dados";

        PreparedStatement stmt = getConnection().prepareStatement(select); //Linha 44
        ResultSet rs = stmt.executeQuery();
[color=red]DadosController(trecho listaDados, por volta da linha 68)[/color]
public List<Dados> listaDados() 
    {
        DadosDao dao = new DadosDao();
        try 
        {
            return dao.findDados(); //Linha 68
	} 
        catch (SQLException e) 
        {
            
            JOptionPane.showMessageDialog(null, "Problemas ao localizar contato\n" + e.getLocalizedMessage());

        }
        
        return null;
	    
    }
[/color]Principal (por volta da linha 33):[/color]
private JFileChooser flImagem;
    private JButton btnSalvar, btnAlterar, btnExcluir, btnClear, btnLocalizar;
    private JButton btnPrimeiro, btnProximo, btnAnterior, btnUltimo, btnAbrir;
    private JButton btnCarregar;
    private List<Dados> contatoList = new DadosController().listaDados(); //Linha 33
    private int registroAtual = 0;
Criado 24 de agosto de 2011
Ultima resposta 24 de ago. de 2011
Respostas 3
Participantes 2