Ajuda, Java + MySql

6 respostas
wilson_neto

Bom dia, estou aprendendo java, ja estudei MySql (+ PHP), porém gostaria de aprender a usá-lo também em aplicativos Desktop…
Procurei allguns tutoriais no google, mas não obtive sucesso (achei, segui o passo a passo, mas não funcionou)…
Uso Linux/Debian e Windows XP, em ambos fiz o seguinte: baixei “mysql-connector-java-5.1.14”, criei um diretório para onde copiei o “mysql-connector-java-5.1.14.jar” e criei a variável CLASSPATH no sistema e associei a ela o caminho do diretório… (estes eram os passos do tutorial)… Feito isto tentei executar este teste

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

public class tst{
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            System.out.println("Driver carregado com sucesso!");
        } 
        catch (Exception ex) {
            System.out.println("Driver nao pode ser carregado!" + "\n" + ex.toString());
        }
    }
}

que me retornou a seguinte saida:

Driver nao pode ser carregado!
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Alguém pode me ajudar?
Onde eu errei?
Como resolver?
agradeço desde já…

Coloquei o tópico em “Java Básico” e não em “JDBC” pois acredito seja uma dúvida básica…

6 Respostas

D

O problema é que o arquivo não está sendo encontrado, tem que ver como era que esse tutorial
indica, mas na hora de compilar vc pode usar

javac -classpath Diretorio\mysql-connector-java-5.1.14 NomeClass.java

Se for no eclipse, vai nas propriedades do projeto e adiciona um External Jar

J

A apostila de fj-21 ensina vc a colocar o driver na aplicação e criar a classe de conexão! da uma olhadinha nela

alanbrasil1984

verifica o que o jonas falou, na apostila até explica que vc não precisa mais do:

Class.forName("com.mysql.jdbc.Driver")
wilson_neto
Valeu galera, no Eclipse rodou legal, e a apostila fj-21 ajudou muito... Mas quando vou executar fora do eclipse, por linha de comando, executa mas não acha o JDBC, então eu executo assim:
java -cp "caminho do conector jdbc".jar javatst
"javatst.class" é minha classe principal onde declarei o método main. Mas a minha saída é esta
Exception in thread "main" java.lang.NoClassDefFoundError: javatst Caused by: java.lang.ClassNotFoundException: javatst at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: javatst. Program will exit.
Não entendo todos os erros ainda, mas este se não me engano significa que o java não achou o arquivo a ser executado... Mas se executo apenas
java javatst
ele executa normal porém não acha as classes necessárias para a conexão com o BD. o arquivo javatst.java que eu compilo usando o comando:
javac javatst
tem o seguinte código:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

import java.sql.Array;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

class JDBCExemplo{
	JDBCExemplo(JTextArea txt){
        try{
        	Connection con = DriverManager.getConnection("jdbc:mysql://localhost/teste","root","root");
        	txt.append("Conectado!\n");
        	
        	String q_str = "select * from phptst";
        	PreparedStatement q_stt = con.prepareStatement(q_str);
        	
        	if(q_stt.execute()) txt.append("query retornou ok...\n");
        	ResultSet rs = q_stt.getResultSet();
        	
        	while(rs.next()){
        		txt.append("Nome: " + rs.getString("nome") + "  id: " + rs.getInt("id") + "\n");
        	}
        	
        	txt.append("Finalizando conexão...\n");
        	con.close();
        	txt.append("Conexão finalizada.");
        }
        catch(Exception e){
        	txt.append("erro :" + e.toString());
        }
	}
	
}


public abstract class javatst {
	public static void main(String[] args) {
		JFrame f = new JFrame("Hello");
		f.setLayout(null);
		f.setBounds(100,100,410,230);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JTextArea txt = new JTextArea(50,50);
		txt.setBounds(10,10,380,180);
		f.add(txt);
		f.setVisible(true);
		JDBCExemplo tst = new JDBCExemplo(txt);
	}
}
Se eu declaro o CLASSPATH (com qualquer valor) nas váriaveis do sistema, eu obtenho o mesmo erro descrito acima (executando qualquer programa até um simples helloworld no console)... Alguém sabe a causa deste erro?
D

Para rodar o .jar tem que está no mesmo diretorio do bytecode .class

wilson_neto

Problema resolvido !!!
Boa tarde a todos, para evitar todo esse processo de criar uma váriavel CLASSPATH (etc…), eu criei um jar, onde está minha classe e o conteúdo do jar JDBC, assim as classes (do JDBC) ficam visíveis para o java sem muita complicação… (e não é necessário fazer todo o processo de copiar o jar JDBC para a máquina do cliente, e configurar o classpath…)
Obrigado a todos que colaboraram, até a próxima…

Criado 9 de fevereiro de 2011
Ultima resposta 11 de fev. de 2011
Respostas 6
Participantes 4