Org.postgresql.util.PSQLException

8 respostas
EuclidesFilizola

Bom dia a todos. Gostaria que me ajudasse numa pequena coisa. Não sei porque, mas ta dando esse erro.

org.postgresql.util.PSQLException: Um erro de E/S ocorreu ao enviar para o processo servidor.

nesse seguinte trecho:

try {
			String sql = "SELECT h.\"Origem\",h.\"Data\",h.\"Destino\" FROM \"Protocolo_protocolo\" AS P, \"Historico\" AS H WHERE p.\"COD_PRO\" = h.\"cod_pro\" AND p.\"COD_PRO\" = ?";
				
			PreparedStatement ps = conexao.prepareStatement(sql);
			
			ps.setInt(1, codigo);
			
			ResultSet rs = ps.executeQuery();

eu acredito que seja por causa de “h.” , alguem poderia me da uma idéia do que seja? Agradeço antecipadamente.

8 Respostas

G
String sql = "SELECT h.Origem, h.Data, h.Destino FROM Protocolo_protocolo AS p, Historico AS h WHERE p.COD_PRO = h.cod_pro AND p.COD_PRO = ?";

Testa ae, só uma coisa, dependendo de como vc criou no banco maiuscula ou miniscula, poderá dar erro dependendo do sql e do sistema operacional.

flw.

Gerson_da_S_Lima

Cara porque tu tá usando " nas consultas (h."Origem… eu acho que é esse o problema, não precisa de aspas para identificar o nome das colunas

EuclidesFilizola

eu utilizo as aspas duplas porque no postegres, quando se tem nome duplos com underline por exemplo, é necessário. Eu tentei essa forma.

"SELECT h.Origem, h.Data, h.Destino FROM Protocolo_protocolo AS p, Historico AS h WHERE p.COD_PRO = h.cod_pro AND p.COD_PRO = ?"; .

Mas não funcionou. Continua o mesmo erro.

Gerson_da_S_Lima

olha, aqui onde eu trabalho e em casa eu utilizo o PostreSQL e nunca precisei utilizar aspas para o nome das colunas, exceto no caso de colunas com caracteres especiais como “código”

Gerson_da_S_Lima

Faz o seguint, posta todo o erro, acho que o problema não tá na tua consulta.

EuclidesFilizola

aqui está o erro.

org.postgresql.util.PSQLException: Um erro de E/S ocorreu ao enviar para o processo servidor.
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:220)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
	at controleProtocolo.DAO.controleDAO.buscaHistorico(controleDAO.java:286)
	at controleProtocolo.buscarDados.service(buscarDados.java:198)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Stream closed
	at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
	at sun.nio.cs.StreamEncoder.flush(Unknown Source)
	at java.io.OutputStreamWriter.flush(Unknown Source)
	at org.postgresql.core.PGStream.flush(PGStream.java:507)
	at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:692)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:193)
	... 20 more

=//// alguem pra me ajudar ?

essa linha aqui.

at controleProtocolo.DAO.controleDAO.buscaHistorico(controleDAO.java:286)

corresponde a isso:

ResultSet rs = ps.executeQuery();

que está dentro de.

try {  
             String sql = "SELECT h.\"Origem\",h.\"Data\",h.\"Destino\" FROM \"Protocolo_protocolo\" AS P, \"Historico\" AS H WHERE p.\"COD_PRO\" = h.\"cod_pro\" AND p.\"COD_PRO\" = ?";  
                   
             PreparedStatement ps = conexao.prepareStatement(sql);  
               
             ps.setInt(1, codigo);

:frowning:

EuclidesFilizola

Descobri o erro moçada. O problema não está na consulta, e sim pelo seguinte.

eu possuo uma condição no meu servlet que ele puxa dois métodos e em cada método ele faz um preparedStatement diferente, com isso, eu fechava a conexão no anterior e por isso dava esse problema. assim sendo:

dentro do meu servlet

controleDao.addHistorico(localAtual,localDestino,codigo);
				
				controleDao.atualizaDestino(localDestino,codigo);

onde em cada um temos.

public void addHistorico(String localAtual, String localDestino, String  codigo){

		try {
			
			
			Calendar cal = new GregorianCalendar();      
			//int dia_da_semana = cal.get(Calendar.DAY_OF_WEEK); // 1=Domingo, 2=Segunda-Feira, etc
			int dia = cal.get(Calendar.DAY_OF_MONTH);      // 1...
			int mes = cal.get(Calendar.MONTH);           // 0=Jan, 1=Fev, ...
			int ano = cal.get(Calendar.YEAR);  

 
			String data = ""+dia+"/"+mes+"/"+ano;
		
		String sql = "INSERT INTO \"Historico\"(\"Origem\",\"Data\", \"Destino\", cod_pro) VALUES (?, ?, ?, ?);";
		
		PreparedStatement ps = conexao.prepareStatement(sql);
		
		ps.setString(1, localAtual);
		

		
		ps.setDate(2,controleDAO
				.getSqlDate(converterStringToDate(data)) );
		ps.setString(3,localDestino);
		ps.setInt(4,Integer.parseInt(codigo));
		
	
		
		ps.execute();

e o outro é:

public void atualizaDestino(String localDestino, String codigo) {
		
		try{
		String sql = "UPDATE \"Protocolo_protocolo\"  SET  \"DES_PRO\" = ? WHERE \"COD_PRO\" = ?";
	PreparedStatement ps = conexao.prepareStatement(sql);

	ps.setString(1,localDestino);
	ps.setString(2,codigo);

	ps.execute();

se eu der um “ps.close()” no metodo anterior, ele trará problemas pro próximo método. Agora eu pergunto, onde está o erro em questão de programação de tudo isso? Em que me acarretará eu não fechando a conexão do método anterior ? Alguém poderia me passar essa informação? grato !

J

bom dia EuclidesFilizola… tudo bem??

Eu tive o mesmo erro que vc… hehehehe.

Acabei resolvendo o mesmo instanciado um objeto de conexão para cada conexão. Ou seja, se eu precisar de duas conexões, eu crio as instancias daoConection1 e daoConection2.
Espero ter ajudado, mesmo que o sua duvida tenha sido no ano de 2009 :slight_smile:

Um abraço

Criado 30 de março de 2009
Ultima resposta 12 de dez. de 2010
Respostas 8
Participantes 4