Erro conexão com Banco de Dados e Java

Alguém pode me ajudar resolver, está dando esse erro no Terminal do Linux

Opened database successfully
org.postgresql.util.PSQLException: Um erro de E/S ocorreu ao enviar para o processo do servidor.
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:214)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:340)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:286)
at insercaoBD.main(insercaoBD.java:42)
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at org.postgresql.core.PGStream.flush(PGStream.java:531)
at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:672)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:187)

import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
//import org.postgresql.Driver;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;

public class insercaoBD{
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
try {

  Class.forName("org.postgresql.Driver");
  con = DriverManager.getConnection("jdbc:postgresql://200.134.10.32:5432/1702PowerPuffGirls","1702PowerPuffGirls", " 353330");


  con.setAutoCommit(false);
  System.out.println("Opened database successfully");
  stmt = con.createStatement();
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();

  //Person
  Document doc = builder.parse("http://dainf.ct.utfpr.edu.br/~gomesjr/BD1/data/person.xml");
  doc.getDocumentElement().normalize();
  NodeList nList = doc.getElementsByTagName("Person");
  for (int i = 0;i < nList.getLength();i++) {
    Node nNode = nList.item(i);
    if(nNode.getNodeType() == Node.ELEMENT_NODE){
      stmt = con.createStatement();
      Element elemnt = (Element) nNode;
      // cria um preparedStatement
      String sql = "'"+elemnt.getAttribute("uri")+"','"+elemnt.getAttribute("name")+"','" + elemnt.getAttribute("hometown")+"'";
             stmt.executeUpdate("INSERT INTO usuario(login,nome_completo,cidade_natal) VALUES("+sql+")");
                stmt.close();
    }

      con.close();
  }
}catch (Exception e) {
       e.printStackTrace();
}

}
}

Tenta não fechar o Statment no fim do laço, só fecha no fim do processo pra ver se funciona.
Cria o statement fora também, dessa forma:

 stmt = con.createStatement();
 Element elemnt = (Element) nNode;
 for (int i = 0;i < nList.getLength();i++) {
    Node nNode = nList.item(i);
    if(nNode.getNodeType() == Node.ELEMENT_NODE){
      // cria um preparedStatement
      String sql = "'"+elemnt.getAttribute("uri")+"','"+elemnt.getAttribute("name")+"','" + elemnt.getAttribute("hometown")+"'";
             stmt.executeUpdate("INSERT INTO usuario(login,nome_completo,cidade_natal) VALUES("+sql+")");
    }
stmt.close();
1 curtida

Obrigada,

agora deu outro erro:

org.postgresql.util.PSQLException: Este comando foi fechado.
at org.postgresql.jdbc2.AbstractJdbc2Statement.checkClosed(AbstractJdbc2Statement.java:2424)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:337)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:286)
at insercaoBD.main(insercaoBD.java:43)

	  //Person
	  Document doc = builder.parse("http://dainf.ct.utfpr.edu.br/~gomesjr/BD1/data/person.xml");
	  doc.getDocumentElement().normalize();
	  NodeList nList = doc.getElementsByTagName("Person");
      stmt = con.createStatement();
	  for (int i = 0;i < nList.getLength();i++) {
		Node nNode = nList.item(i);
		if(nNode.getNodeType() == Node.ELEMENT_NODE){
		  Element elemnt = (Element) nNode;
		  // cria um preparedStatement
		  String sql = "'"+elemnt.getAttribute("uri")+"','"+elemnt.getAttribute("name")+"','" + elemnt.getAttribute("hometown")+"'";
				 stmt.executeUpdate("INSERT INTO usuario(login,nome_completo,cidade_natal) VALUES("+sql+")");		
		}
	  }
	  stmt.close();
	  con.close();

Faz assim, o encerramento do Statement e da conexão tem que ficar fora do laço.

eu testei e vi que o erro ta nessa linha

stmt.executeUpdate(“INSERT INTO usuario(login,nome_completo,cidade_natal) VALUES(”+sql+")");

Sim, joga o encerramento do stmt e do con para fora do laço

  //Person
  Document doc = builder.parse("http://dainf.ct.utfpr.edu.br/~gomesjr/BD1/data/person.xml");
  doc.getDocumentElement().normalize();
  NodeList nList = doc.getElementsByTagName("Person");
  stmt = con.createStatement();
  for (int i = 0;i < nList.getLength();i++) {
	Node nNode = nList.item(i);
	if(nNode.getNodeType() == Node.ELEMENT_NODE){
	  Element elemnt = (Element) nNode;
	  // cria um preparedStatement
	  String sql = "'"+elemnt.getAttribute("uri")+"','"+elemnt.getAttribute("name")+"','" + elemnt.getAttribute("hometown")+"'";
			 stmt.executeUpdate("INSERT INTO usuario(login,nome_completo,cidade_natal) VALUES("+sql+")");		
	}
  }
  stmt.close();
  con.close();

Faz exatamente desse jeito

deu certo, obrigada