简体   繁体   English

Postgres异常:查询未返回任何结果。

[英]Postgres Exception : No results were returned by the query.

I am trying to insert some rows in to a table... I am using postgressql-7.2.jar. 我试图在表中插入一些行...我正在使用postgressql-7.2.jar。

I get the following exception 我得到以下异常

org.postgresql.util.PSQLException: No results were returned by the query. org.postgresql.util.PSQLException:查询未返回任何结果。
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255)

I have already Googled and the possible reasons suggested are 我已经谷歌搜索,可能的原因是

  1. Use executeUpdate() method or execute() method instead of executeQuery() method. 使用executeUpdate()方法或execute()方法而不是executeQuery()方法。

  2. This could possibly be because of jar problem; 这可能是因为罐子问题; try other versions of postgres jars. 尝试其他版本的postgres罐子。

  3. In some places they save it could be because of heap space error. 在某些地方,他们保存它可能是因为堆空间错误。

I have tried all the three solutions but none of them work... 我已经尝试了所有这三种解决方案,但它们都没有工作......

I am not pasting the code since I have just used statement.executeUpdate(queryString) . 我没有粘贴代码,因为我刚刚使用了statement.executeUpdate(queryString) The insert statements load the data in to the table but still I get this error. insert语句将数据加载到表中但仍然出现此错误。

Can some one help me out in this? 有人可以帮我解决这个问题吗?

This code works perfectly for me running PostgreSQL 8.1 and its driver. 这段代码非常适合我运行PostgreSQL 8.1及其驱动程序。 Perhaps it can be a template for finding what's wrong with yours. 也许它可以成为找出你的错误的模板。

You need a single table named PERSON with columns PERSON_ID, FIRST_NAME, LAST_NAME. 您需要一个名为PERSON的表,其中包含PERSON_ID,FIRST_NAME,LAST_NAME列。 I made PERSON_ID the auto incremented primary key. 我将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;
    }
}

What type of SQL statement are you trying to run with executeQuery() ? 您尝试使用executeQuery()运行什么类型的SQL语句? It should not be an INSERT or UPDATE - these are not queries. 它不应该是INSERT或UPDATE - 这些不是查询。

Without posting the actual SQL statement, code samples, or what the table looks like - it's pretty hard to actually help you with your problem. 没有发布实际的SQL语句,代码示例或表格的样子 - 实际上很难帮助您解决问题。 Without specifics all we can do is guess. 没有具体细节我们所能做的就是猜测。

插入行的语句不会返回任何行作为结果,而不是SELECT。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM