2010-09-26 12 views
12

मैं कुछ पंक्तियों को एक टेबल में डालने की कोशिश कर रहा हूं ... मैं postgressql-7.2.jar का उपयोग कर रहा हूं।पोस्टग्रेज अपवाद: क्वेरी द्वारा कोई परिणाम नहीं लौटाया गया।

मैं निम्न अपवाद प्राप्त

org.postgresql.util.PSQLException: कोई परिणाम नहीं क्वेरी से लौट रहे थे।
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery पर (AbstractJdbc2Statement.java:255)

मैं पहले से ही Google पर है और संभव सुझाव कारणों

हैं
  1. उपयोग executeUpdate() विधि या execute() बजाय विधि executeQuery() विधि।

  2. यह संभवतः जार समस्या के कारण हो सकता है; पोस्टग्रेस जार के अन्य संस्करणों को आजमाएं।

  3. कुछ स्थानों पर वे इसे हेप स्पेस त्रुटि के कारण सहेज सकते हैं।

मैं सभी तीन समाधान की कोशिश की है, लेकिन उनमें से कोई भी काम ...

मैं के बाद से मैं सिर्फ statement.executeUpdate(queryString) का इस्तेमाल किया है कोड पेस्ट नहीं कर रहा हूँ। सम्मिलित करें कथन तालिका में डेटा लोड करें लेकिन फिर भी मुझे यह त्रुटि मिलती है।

क्या कोई इस में मेरी सहायता कर सकता है?

+2

अपना कोड अधिक पोस्ट करें - मैं ड्राइवर के बजाए आपके कोड के कारण होने वाली त्रुटि पर पैसे डालूंगा। – duffymo

उत्तर

4

यह कोड पोस्टग्रेएसक्यूएल 8.1 और उसके ड्राइवर को चलाने के लिए पूरी तरह से काम करता है। शायद यह आपके लिए क्या गलत है यह जानने के लिए एक टेम्पलेट हो सकता है।

आपको कॉलर्स PERSON_ID, FIRST_NAME, LAST_NAME के ​​साथ PERSON नाम की एक एकल तालिका की आवश्यकता है। मैंने ऑटो वृद्धिशील प्राथमिक कुंजी PERSON_ID बनाई है।

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

इस उदाहरण के साथ कुछ भी गलत नहीं है - और यह इसके बारे में दुखद बात है। मैन, मुझे याद है कि मैं जेडीबीसी टेम्पलेट/सरल जेडीबीसी टेम्पलेट कक्षाओं का उपयोग क्यों करता हूं वसंत प्रदान करता है - क्या वे वास्तव में ऐसा करने की कोशिश करते हुए जेडीबीसी को अधिक अप्रिय बना सकते हैं? – MetroidFan2002

+0

मुझे वसंत भी पसंद है, MetroidFan2002। दुखद, वास्तव में। 8) – duffymo

2

executeQuery() के साथ आप किस प्रकार का SQL कथन चलाने की कोशिश कर रहे हैं? यह एक इंसर्ट या अद्यतन नहीं होना चाहिए - ये प्रश्न नहीं हैं।

वास्तविक SQL कथन, कोड नमूने, या तालिका की तरह दिखने के बिना - वास्तव में आपकी समस्या के साथ आपकी सहायता करने में बहुत मुश्किल है। विनिर्देशों के बिना हम अनुमान लगा सकते हैं।

+0

मैं executeQuery का उपयोग नहीं कर रहा हूं .... मैं executeUpdate() का उपयोग कर रहा हूं और मैं तालिका में सम्मिलित करने की कोशिश कर रहा हूं –

+0

executeUpdate() पहले से मौजूद एक पंक्ति को बदलता है, है ना? –

+0

@ बालाजी, आप दोनों का उपयोग करने के बारे में अपने प्रश्न में बताते हैं, जो थोड़ा उलझन में है। क्या आप बस एक कोड नमूना और एसक्यूएल कथन पोस्ट कर सकते हैं? वास्तविक फ़ील्ड, टैबलेटनाम इत्यादि अप्रासंगिक हैं, यदि आप इस बारे में चिंतित हैं तो इन्हें अपवित्र किया जा सकता है। क्या मैं पूछ सकता हूं कि आप पोस्टग्रेस जेडीबीसी ड्राइवर के पुराने संस्करण का उपयोग क्यों कर रहे हैं? [यह पृष्ठ] [http://jdbc.postgresql.org/download.html] कहता है कि यहां तक ​​कि नवीनतम पोस्टग्रेस जेडीबीसी ड्राइवर 7.2 के साथ संगत है।शायद ड्राइवर में एक बग है? –

1

पंक्तियों को सम्मिलित करने वाला एक बयान परिणाम के रूप में किसी भी पंक्ति को वापस नहीं देता है, जैसा कि चयन के विपरीत होता है।

संबंधित मुद्दे