Erro ao utilizar PreparedStatement

10 respostas
tiagoscd

Boa tarde galera!

Seguinte, estou tentando utilizar o PreparedStatement para efetuar a contagem de registros numa tabela do banco de dados, porém quando execute o código abaixo ele dá um erro. Ao debugar, notei que o erro está na linha que estou atribuindo ao PreparedStatement (this.pst) o prepareStatement.

O servidor retorna isso:
"SEVERE: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException"

Alguém pode me ajudar?

Grato pela atenção!

public int count() {
    int lines = 0;
		
    try {
        this.mysql.connect();
			
        this.pst = this.con.prepareStatement("SELECT count(*) AS count FROM customer;");
			
        this.rs = this.pst.executeQuery();
        this.rs.next();
			
        lines = this.rs.getInt("count");
			
        this.pst.close();
        this.rs.close();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        this.mysql.disconnect();
    }
		
    return lines;
}

10 Respostas

B

Tenta tirar o ; ao final da sql, e também ao invés de getInt(“count”), tente getInt(1)

tiagoscd

Já tentei, o erro continua! Sei que a conexão com o banco de dados está ok, pois efetuo outras ações no banco de dados, via Java, e funcionam tranquilamente. Somente quando utilizo PreparedStatement dá erro. Quando uso o Statement vai certinho :expressionless:

Mais alguma sugestão?

Grato!

B

O stacktrace não retorna a linha onde foi o exceção? Tente também fechar o result set antes do prepared statement.

tiagoscd

Retorna sim, e é exatamente a mesma linha que encontrei no debug, a de atribuição do prepareStatement ao PreparedStatement!

this.pst = this.con.prepareStatement("SELECT count(*) AS count FROM customer;");

PS: Inverti a posição dos “close()” e o erro persiste =\

Grato pela atenção

RaulCarlin

Mostra o código de conexão, que atribui à esse objeto con o Connection com o MySQL… provavelmente tá lá o problema…

tiagoscd

Na realidade o problema não está na conexão, pois ao executar comandos através do Statement, usando a mesma conexão, funciona tranquilamente. Mas pra desencargo de consciência:

MySQL.java
public void connect() {
	try {
		String serverString = "jdbc:mysql://" + this.server + "/" + this.databaseName;
	
		Class.forName(this.driver);
		this.connection = DriverManager.getConnection(serverString, this.user, this.password);
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
}

public Connection getConnection() {
	return this.connection;
}

public void setConnection(Connection connection) {
	this.connection = connection;
}
Database.java
private Connection con;

public Database() {
	this.mysql = new MySQL();
	this.con = this.mysql.getConnection();
}

Até mais!

RaulCarlin

Tenta o seguinte, antes do mysql.getConnection() da classe Database, tenta mysql.connect() e depois mysql.getConnection()

tiagoscd

Putz, que mancada! hehhehe

Brigadão velho, o problema era esse mesmo…

Atribuir o valor da conexão antes de chamá-la não dá!

Valeu galera, brigadão pela ajuda!

RaulCarlin

Pra ficar show de bola, no construtor da classe MySQL, já chama o connect()… :wink:

tiagoscd

É, acho que é melhor! hehehee

Até mais

Criado 7 de junho de 2008
Ultima resposta 7 de jun. de 2008
Respostas 10
Participantes 3