Erro no statement, SQL

11 respostas
J

Fala rapez…
Estou tentando inserir um statemente aqui,

public void alterarCliente(ClienteBean cliente){

try{

pstm = bd.conectar().prepareStatement(alteraCliente);

pstm.setString(1,cliente.getNome());
}catch(Exception e){
    e.printStackTrace();
}

O erro acontece aqui:

pstm = bd.conectar().prepareStatement(alteraCliente);

até o bd.conectar(), funciona normalmente, quando eu digito um botão depois do parenteses, era para aparecer o auto completar do "prepareStatement();

Só que não aparece, e ta dando erro, nao sei se ficou alguma coisa sem importar,

alguma solução?


11 Respostas

R

Infelizmente não dá para saber nada dai…

O quê bd.conectar() retorna?

Coloque o código da Classe acessoMySql para gente você o que acontece.
Coloque também, o stacktrace da exceção.

Um abraço.

J

Simplesmente ele nao retorna nada,
eu coloco assim,

pstm = bd.conectar()

A proxima parte seria digital um ponto depois do ultilmo parenteses e completar com prepareStatement(alterarCliente);

só que não aparece aquele auto completar.
Se eu tento digitar na mao, dá erro.

Era pra ficar assim " pstm = bd.conectar().prepareStatement(alterarCliente); "

Nesta linha (" pstm = bd.conectar().prepareStatement(alterarCliente); " ), aparece uma exclamação do erro contendo o seguinte:

! void cannot be deferenced

Código da classe acessoMySql

package acessobd;

import java.sql.;
import java.lang.
;

public class acessoMySql {

PreparedStatement pstm;
ResultSet rs;
Connection con;

public acessoMySql(){

}

public void conectar(){
    
String url="jdbc:mysql://localhost:3306/mysql";
String user="root";
String pass="admin";        
String driver="com.mysql.jdbc.Driver";

try{
    Class.forName(driver);
    con = DriverManager.getConnection (url,user,pass);
    System.out.println("Conectado");
}catch(ClassNotFoundException ex){
    System.out.println("Classe não encontrada"+ex);
    
}catch(Exception ex){
    System.out.println("Erro na conexao"+ex);
}
}

}

Valeu RAFAEL !

Rendrys

Não é querendo te desanimar, mas por que você ta mexendo com banco de dados sem saber coisas mais básicas ainda da linguagem e de orientação a objetos?
Coisas básicas como a convenção de que nome de Classe começa com letra maiúscula (AcessoMySql e não acessoMySql) ou que seu método não funciona porque tem retorno “void” (ou seja, retorne seu “con” que vai funcionar).

J

Por isso estou no forum do java básico, se eu soubesse o que fazer nao estaria no básico, nem no avançado, nao teria dúvidas.

J

obs: Isto é conteúdo de uma vídeo-aula.

Rendrys

Não to falando do forum, mas do assunto que você esta estudando… não deveria estar tentando fazer coisas com banco de dados… mas enfim…
como falei, é so retornar o “con” da linha:

con = DriverManager.getConnection (url,user,pass);
J

Você está enganado, não tenho problemas na classe acessoMySql, ela esta funcionando, só coloquei o código pro Rafael ver.

Rendrys

A classe em si não tem problema cara, mas você não consegue fazer conectar().prepareStatement() porque “conectar()” retorna VOID.
Dessa forma, ao retornar o “con” (Connection) no metodo conectar() você conseguirá chamar o prepareStatement(), pois este é um método da classe Connection.

R
Rendrys:
Não é querendo te desanimar, mas por que você ta mexendo com banco de dados sem saber coisas mais básicas ainda da linguagem e de orientação a objetos? Coisas básicas como a convenção de que nome de Classe começa com letra maiúscula (AcessoMySql e não acessoMySql) ou que seu método não funciona porque tem retorno "void" (ou seja, retorne seu "con" que vai funcionar).

Verdade... muita verdade nisso!

Mas....

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

public class acessoMySql {

	PreparedStatement pstm;
	ResultSet rs;
	Connection con;

	public acessoMySql() {
		String url = "jdbc:mysql://localhost:3306/mysql";
		String user = "root";
		String pass = "admin";
		String driver = "com.mysql.jdbc.Driver";

		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url, user, pass);
			System.out.println("Conectado");
		} catch (ClassNotFoundException ex) {
			System.out.println("Classe não encontrada" + ex);

		} catch (Exception ex) {
			System.out.println("Erro na conexao" + ex);
		}
	}

	public Connection conectar() throws Exception {
		if(null != con){
			return con;
		}
		
		throw new Exception("Não conectou!");
	}
}

Tai ai!

Rendrys

Errr eu não queria colocar código pronto, mas já que o Rafael colocou…
Percebeu que ele trocou o retorno de conectar() de public void conectar() pra public Connection conectar() ?..
Dessa nova forma é possivel fazer conectar().prepareStatement()…

J

Sim Sim, eu entendi agora, desculpa pela ignorancia… estou seguindo uma video-aula, da uma olhada…
Obrigado, agora resolveu…


Criado 10 de abril de 2012
Ultima resposta 10 de abr. de 2012
Respostas 11
Participantes 3