Como compilar classe que acessa banco de dados?

12 respostas
M

Olá, sou nova neste ramo, estou começando a estudar sobre java e já tenho um trabalho de faculdade para entregar. Estou tentando acessar um banco de dados MySql mas não consigo compilar a classe, detalhe, estou compilando pela linha de comando do prompt.
Ja baixei o driver de conexão (uso com.mysql.jdbc.Driver), já atualizei a variável de ambiente CLASSPATH no windows com o arquivo .jar, mas nada, vocês podem me ajudar?

package site; import java.sql.*; public class DB { String sQuery; public void GravarDados(String drv, String conexao) { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mySQL://localhost:3306/Casamento?useUnicode=true","root","administrador"); Statement stat = con.createStatement(); sQuery="INSERT INTO PESSOA(Pes_Nome) Values(Alyne)"; stat.executeQuery(sQuery); stat.close(); con.close(); } }

12 Respostas

Luiz-SP

Qual a exception que vc tá recebendo? Como vc tá compilando? Pq vc não usa uma IDE, tipo o eclipse?

M

A Exception é essa, e estou usando linha de comando pois é uma exigência do professor, temos que fazer funcionar na frente dele.

C:\projeto_jsp>javac site\DB.java

site\DB.java:6: unreported exception java.lang.ClassNotFoundException; must be c

aught or declared to be thrown

Class.forName(com.mysql.jdbc.Driver);

^

site\DB.java:7: unreported exception java.sql.SQLException; must be caught or de

clared to be thrown

Connection con = DriverManager.getConnection(jdbc:mySQL://local

host:3306/Casamento?useUnicode=true,root,administrador);

^

site\DB.java:8: unreported exception java.sql.SQLException; must be caught or de

clared to be thrown

Statement stat = con.createStatement();

^

site\DB.java:10: unreported exception java.sql.SQLException; must be caught or d

eclared to be thrown

stat.executeQuery(sQuery);

^

site\DB.java:11: unreported exception java.sql.SQLException; must be caught or d

eclared to be thrown

stat.close();

^

site\DB.java:12: unreported exception java.sql.SQLException; must be caught or d

eclared to be thrown

con.close();

^

6 errors
M

Pessoal, por favor, me ajudem. Estou fazendo errado, não é possível fazer o que estou tentando. Se não der me avisem que eu paro de tentar.
Obrigada

J

O erro é o seguinte. As classes de conexão devem estar dentro de um try-catch ou o método deve usar throws Exception pra levantar uma exceção.

Faça as alterações:

package site;
 import java.sql.*;
 public class DB {
 	String sQuery;
         public void GravarDados(String drv, String conexao) {
		try {
 		  Class.forName("com.mysql.jdbc.Driver");
                  Connection con = DriverManager.getConnection("jdbc:mySQL://localhost:3306/Casamento?useUnicode=true","root","administrador");
                  Statement stat = con.createStatement();
 		  sQuery="INSERT INTO PESSOA(Pes_Nome) Values(Alyne)";
 		  stat.executeQuery(sQuery);
                                 stat.close();
 		con.close();

		}
		catch(Exception ex) {
		  ex.printStackTrace();
		}
 	}
 }

Provavelmente aparecerão alguns erros mas daí o ex.printStackTrace() já vai listar pra você.

rodrigo_gomes

Olá,

Altere seu método para (com throws no final)

public void GravarDados(String drv, String conexao) throws Exception { 
...

ou coloque try/catch

public void GravarDados(String drv, String conexao) {
        try{
 		Class.forName("com.mysql.jdbc.Driver");
                 Connection con = DriverManager.getConnection("jdbc:mySQL://localhost:3306/Casamento?useUnicode=true","root","administrador");
                 Statement stat = con.createStatement();
 		sQuery="INSERT INTO PESSOA(Pes_Nome) Values(Alyne)";
 		stat.executeQuery(sQuery);
 		stat.close();
 		con.close();
        }catch(Exception ex){
               ex.printStackTrace();
        }
}

Material de referencia pra vc dar uma lida
http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/
http://www.linux.ime.usp.br/~bani/java/ej6.html

[]´s
Rodrigo

ddduran

Bom dia Marcia
o método forNama joga uma exceção do tipo ClassNotFoundException
e o método getConnection uma do tipo SQLException

logo seu método deve ou tratar essas exceções em um bloco try

ou seu método deve jogar essas exceções

outra coisa é interessante fechar suas conexões num finally desse bloco

seu código poderia ficar assim

Connection con = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection("jdbc:mySQL://localhost:3306/Casamento?useUnicode=true","root","administrador");
			Statement stat = con.createStatement();
			sQuery="INSERT INTO PESSOA(Pes_Nome) Values(Alyne)";
			stat.executeQuery(sQuery);
			stat.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			if(con!=null)
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
ddduran

opa o Amigo respondeu enquanto eu estava digitando :stuck_out_tongue:

M

Entendi os problemas e alterei a classe conforme vocês me ajudaram, agora aparece outro erro

C:\>java DB
java.sql.SQLException: Can not issue data manipulation statements with executeQu
ery().
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
        at com.mysql.jdbc.Statement.checkForDml(Statement.java:401)
        at com.mysql.jdbc.Statement.executeQuery(Statement.java:1078)
        at DB.GravarDados(DB.java:15)
        at DB.main(DB.java:5)

C:\>

aqui está a classe

import java.sql.*; public class DB { public static void main(String[] args) { DB teste=new DB(); teste.GravarDados(); } public void GravarDados(){ String sQuery; Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mySQL://localhost:3306/Casamento?useUnicode=true","root","administrador"); Statement stat = con.createStatement(); sQuery="INSERT INTO PESSOA(Pes_Nome) Values(Alyne)"; stat.executeQuery(sQuery); stat.close(); System.out.println("finalizou"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally{ if(con!=null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }

rodrigo_gomes

Olá,

troque o executeQuery por executeUpdate.

[]´s
Rodrigo

M

Valeu pessoal, agora funcionou.
Muito Obrigada mesmo!!! :lol:

Daniel_Quirino_Olive

Para maiores informações:

http://java.sun.com/j2se/1.5.0/docs/api

cv1

Ok, agora pare o que vc esta fazendo (tentar usar JDBC) e volte a estudar a linguagem Java - orientacao a objetos, operadores, metodos, tipos, excecoes, assinaturas, estruturas de controle e tudo mais.

Dai, volte a mexer com bancos de dados, web e o que for :wink:

Criado 15 de novembro de 2006
Ultima resposta 16 de nov. de 2006
Respostas 12
Participantes 7