2010-09-26 18 views
12

Ich versuche, einige Zeilen in eine Tabelle einzufügen ... Ich verwende postgressql-7.2.jar.Postgres-Ausnahme: Von der Abfrage wurden keine Ergebnisse zurückgegeben.

Ich erhalte die folgende Ausnahme

org.postgresql.util.PSQLException: Es wurden keine Ergebnisse von der Abfrage zurückgegeben.
bei org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery (AbstractJdbc2Statement.java:255)

Ich habe schon gegoogelt und die möglichen Gründe sind vorgeschlagen

  1. Verwenden executeUpdate() Methode oder execute() Verfahren statt executeQuery() Methode.

  2. Dies könnte möglicherweise wegen Glasproblem sein; Probieren Sie andere Versionen von Postgres-Gläsern.

  3. In einigen Orten, die sie speichern, könnte es aufgrund von Heap-Platz Fehler sein.

ich versucht habe, die alle drei Lösungen, aber keiner von ihnen arbeiten ...

Ich bin nicht den Code einfügen, da ich nur statement.executeUpdate(queryString) verwendet haben. Die Einfügen Anweisungen laden Sie die Daten in die Tabelle, aber immer noch bekomme ich diesen Fehler.

Kann jemand mir dabei helfen?

+2

Posten Sie mehr von Ihrem Code - ich würde Geld auf den Fehler setzen, der durch Ihren Code eher als der Fahrer verursacht wird. – duffymo

Antwort

4

Dieser Code funktioniert perfekt für mich mit PostgreSQL 8.1 und seinem Treiber. Vielleicht kann es eine Vorlage sein, um herauszufinden, was mit dir los ist.

Sie benötigen eine einzelne Tabelle namens PERSON mit den Spalten PERSON_ID, FIRST_NAME, LAST_NAME. Ich habe PERSON_ID zum automatisch inkrementierten Primärschlüssel gemacht.

package persistence; 

import java.sql.*; 
import java.util.*; 

public class DatabaseUtils 
{ 
    private static final String DEFAULT_DRIVER = "org.postgresql.Driver"; 
    private static final String DEFAULT_URL = "jdbc:postgresql://localhost:5432/party"; 
    private static final String DEFAULT_USERNAME = "pgsuper"; 
    private static final String DEFAULT_PASSWORD = "pgsuper"; 

    public static void main(String[] args) 
    { 
     String driver = ((args.length > 0) ? args[0] : DEFAULT_DRIVER); 
     String url = ((args.length > 1) ? args[1] : DEFAULT_URL); 
     String username = ((args.length > 2) ? args[2] : DEFAULT_USERNAME); 
     String password = ((args.length > 3) ? args[3] : DEFAULT_PASSWORD); 

     Connection connection = null; 

     try 
     { 
      connection = createConnection(driver, url, username, password); 
      DatabaseMetaData meta = connection.getMetaData(); 
      System.out.println(meta.getDatabaseProductName()); 
      System.out.println(meta.getDatabaseProductVersion()); 

      String sqlQuery = "SELECT PERSON_ID, FIRST_NAME, LAST_NAME FROM PERSON ORDER BY LAST_NAME"; 
      System.out.println("before insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 

      connection.setAutoCommit(false); 
      String sqlUpdate = "INSERT INTO PERSON(FIRST_NAME, LAST_NAME) VALUES(?,?)"; 
      List parameters = Arrays.asList("Foo", "Bar"); 
      int numRowsUpdated = update(connection, sqlUpdate, parameters); 
      connection.commit(); 

      System.out.println("# rows inserted: " + numRowsUpdated); 
      System.out.println("after insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 
     } 
     catch (Exception e) 
     { 
      rollback(connection); 
      e.printStackTrace(); 
     } 
     finally 
     { 
      close(connection); 
     } 
    } 

    public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException 
    { 
     Class.forName(driver); 

     if ((username == null) || (password == null) || (username.trim().length() == 0) || (password.trim().length() == 0)) 
     { 
      return DriverManager.getConnection(url); 
     } 
     else 
     { 
      return DriverManager.getConnection(url, username, password); 
     } 
    } 

    public static void close(Connection connection) 
    { 
     try 
     { 
      if (connection != null) 
      { 
       connection.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 


    public static void close(Statement st) 
    { 
     try 
     { 
      if (st != null) 
      { 
       st.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void close(ResultSet rs) 
    { 
     try 
     { 
      if (rs != null) 
      { 
       rs.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void rollback(Connection connection) 
    { 
     try 
     { 
      if (connection != null) 
      { 
       connection.rollback(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static List<Map<String, Object>> map(ResultSet rs) throws SQLException 
    { 
     List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); 

     try 
     { 
      if (rs != null) 
      { 
       ResultSetMetaData meta = rs.getMetaData(); 
       int numColumns = meta.getColumnCount(); 
       while (rs.next()) 
       { 
        Map<String, Object> row = new HashMap<String, Object>(); 
        for (int i = 1; i <= numColumns; ++i) 
        { 
         String name = meta.getColumnName(i); 
         Object value = rs.getObject(i); 
         row.put(name, value); 
        } 
        results.add(row); 
       } 
      } 
     } 
     finally 
     { 
      close(rs); 
     } 

     return results; 
    } 

    public static List<Map<String, Object>> query(Connection connection, String sql, List<Object> parameters) throws SQLException 
    { 
     List<Map<String, Object>> results = null; 

     PreparedStatement ps = null; 
     ResultSet rs = null; 

     try 
     { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) 
      { 
       ps.setObject(++i, parameter); 
      } 

      rs = ps.executeQuery(); 
      results = map(rs); 
     } 
     finally 
     { 
      close(rs); 
      close(ps); 
     } 

     return results; 
    } 

    public static int update(Connection connection, String sql, List<Object> parameters) throws SQLException 
    { 
     int numRowsUpdated = 0; 

     PreparedStatement ps = null; 

     try 
     { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) 
      { 
       ps.setObject(++i, parameter); 
      } 

      numRowsUpdated = ps.executeUpdate(); 
     } 
     finally 
     { 
      close(ps); 
     } 

     return numRowsUpdated; 
    } 
} 
+0

Mit diesem Beispiel ist nichts falsch - und das ist der traurige Teil. Mann, ich erinnere mich jetzt, warum ich die JdbcTemplate/SimpleJdbcTemplate-Klassen benutze, die Spring bietet - hätten sie JDBC anstößiger machen können, wenn sie es tatsächlich versuchten? – MetroidFan2002

+0

Ich mag auch Frühling, MetroidFan2002. Traurig, in der Tat. 8) – duffymo

2

Welche Art von SQL-Anweisung möchten Sie mit executeQuery() ausführen? Es sollte kein INSERT oder UPDATE sein - das sind keine Abfragen.

Ohne die eigentliche SQL-Anweisung, Codebeispiele oder wie die Tabelle aussieht - es ist ziemlich schwer, Ihnen tatsächlich bei Ihrem Problem zu helfen. Ohne Einzelheiten können wir nur raten.

+0

Ich benutze executeQuery nicht .... Ich benutze executeUpdate() und ich versuche, in die Tabelle einfügen –

+0

executeUpdate() ändert eine Zeile, die bereits existiert, nicht wahr? –

+0

@Balaji, Sie scheinen in Ihrer Frage zu sagen, beide zu verwenden, was ein wenig verwirrend ist. Können Sie einfach ein Codebeispiel und die SQL-Anweisung posten? Die tatsächlichen Felder, Tabellennamen usw. sind irrelevant, diese können verschleiert werden, wenn Sie sich darum kümmern. Kann ich fragen, warum Sie eine solche alte Version des Postgres JDBC-Treibers verwenden? [Diese Seite] [http://jdbc.postgresql.org/download.html] besagt, dass sogar der neueste Postgres JDBC-Treiber mit 7.2 kompatibel ist.Vielleicht gibt es einen Bug im Treiber? –

1

Eine Anweisung, die Zeilen einfügt, gibt im Gegensatz zu SELECT keine Zeilen als Ergebnis zurück.

Verwandte Themen