Um erro de E/S ocorreu ao enviar um processo pro servidor

4 respostas
Diegomoco

Classe de conexão com o banco de dados

package edu.univas.si4.lp4.dataaccess.dao;

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

import edu.univas.si4.lp4.exceptions.ConnectionException;

public class ConnectDataBase {
	public static Connection _connection = null;
	
	static{
		try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public Connection openConection() throws ConnectionException{
		if(_connection == null){
			try {
				_connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Doctor", "Diego", "12345");
			} catch (SQLException e) {
				e.printStackTrace();
				throw new ConnectionException("Não foi possivel estabelecer conexão com o banco", e);
			}
		}
		return _connection;
	}
	
	public void closeConnection() throws ConnectionException{
		if(_connection != null){
			try {
				_connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new ConnectionException("Não foi possivel fechar a conexão com o banco de dados");
			}
		}
	}
}

Classe DAO

package edu.univas.si4.lp4.dataaccess.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import edu.univas.si4.lp4.dataaccess.Patient;
import edu.univas.si4.lp4.exceptions.ConnectionException;

public class PatientDAO {
	private ConnectDataBase _connectDataBase = null;
	private int _id = 0;
	
	public PatientDAO() {
		_connectDataBase = new ConnectDataBase();
	}
	
	public int getNextId() throws SQLException, ConnectionException {
		Statement statement = _connectDataBase.openConection().createStatement();
		ResultSet resultSet = statement.executeQuery("select nextval('seq_patient')");
		resultSet.next();
		_id = resultSet.getInt(1);
		statement.close();
		_connectDataBase.closeConnection();
		
		return _id;
		
	}

	public void insert(Patient patient) throws SQLException, ConnectionException {
		String sql = "INSERT INTO patient(" +
						"id, full_name, birthday, age, email," +
						" phonenumber, cellphonenumber, cpf, sexo," +
						" identity, adress, neighborhood, cep, city)" +
						"values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
		
		PreparedStatement preparedStatement = _connectDataBase.openConection().prepareStatement(sql);
		preparedStatement.setInt(1, _id);
		preparedStatement.setString(2, patient.getName());
		preparedStatement.setDate(3, new java.sql.Date(patient.getBirthday().getTime()));
		preparedStatement.setInt(4, patient.getAge());
		preparedStatement.setString(5, patient.getEmail());
		preparedStatement.setString(6, patient.getPhoneNumber());
		preparedStatement.setString(7, patient.getCellPhoneNumber());
		preparedStatement.setString(8, patient.getCpf());
		preparedStatement.setString(9, patient.getSex());
		preparedStatement.setString(10, patient.getIdentity());
		preparedStatement.setString(11, patient.getAdress());
		preparedStatement.setString(12, patient.getNeighborhood());
		preparedStatement.setString(13, patient.getCep());
		preparedStatement.setString(14, patient.getCity());
		
		preparedStatement.executeUpdate();
		preparedStatement.close();
		
		_connectDataBase.closeConnection();
		
	}

}

Aí está dando um erro de E/S ocorreu ao enviar um processo pro servidor.
O que pode ser??

4 Respostas

ViniGodoy

Você poderia, pelo menos, ressaltar a linha onde o erro ocorre?

Diegomoco

Na linha 54 do código postado acima…
Nessa parte aqui

preparedStatement.executeUpdate();   
        preparedStatement.close();   
           
        _connectDataBase.closeConnection();
ViniGodoy

E que erro é? Põe a stack trace dele para a gente ver.

Geralmente, erros de E/S estão relacionados a perda de conexão com o servidor, o que dificilmente ocorre em situações normais. Posta a stacktrace que vai dar para ver melhor o que está acontecendo.

Diegomoco

Bom não estou com a aplicação aqui pra poder postar o trace. Mas eu consegui resolver o problema da seguinte forma:

public Connection openConection() throws ConnectionException{ if(_connection == null){ <----------------------- try { _connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Doctor", "Diego", "12345"); } catch (SQLException e) { e.printStackTrace(); throw new ConnectionException("Não foi possivel estabelecer conexão com o banco", e); } } return _connection; }

public void closeConnection() throws ConnectionException{ if(_connection != null){ try { _connection.close(); _connection = null; <------------------------ } catch (SQLException e) { e.printStackTrace(); throw new ConnectionException("Não foi possivel fechar a conexão com o banco de dados"); } } }

No método openConnection existe um if que verifica se a conexão é nula e se é nula ele conecta.
Acontece que ela estava sendo nula somente a primeira vez depois ela estava sendo apenas “close” e não null.
Então botei uma linha setando ela como null quando fecha a conexão.

Assim meus problemas se acabaram siiii rsrsrs

Não sei se é o jeito certo, mas não vejo problema nisso.

Criado 20 de novembro de 2008
Ultima resposta 21 de nov. de 2008
Respostas 4
Participantes 2