SQL не работает в Java, когда это должно - PullRequest
0 голосов
/ 31 марта 2011

Я проверил свой sql в pgAdmin, он возвращает результаты нормально. Однако, когда в Java он не возвращает никаких значений, когда даты - 25/03/2011 и 30/03/2011, но он возвращает, когда начинается 23.03.2011.

У меня есть System.out.printlned sql, который я создал, и запустил его в pgAdmin, и он возвращает результаты нормально, но в Java это не так, есть идеи, почему? База данных закрыта и закрыта, а также нормально настроен набор результатов и результатов, я не вижу проблемы? Вот фрагмент моего кода

String sql = "SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value"
            + " FROM SalesRep, OrderLine, ShopOrder WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID"
            + " AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID"
            + " AND ShopOrder.OrderDate BETWEEN '"+start+"' AND '"+finish+"'"
            + " GROUP BY SalesRep.SalesRepID, SalesRep.Name "
            + " ORDER BY Total_Value DESC";
            System.out.println(sql);
    try {
        rs = Database.stmt.executeQuery(sql);
        String name;
        int total;
        double totalPrice;
        int count = 0;
        String output;

        if (rs.next()) {
            System.out.println("Sales representative performace review from " + start + " to " + finish);
            name = rs.getString(1);
            total = rs.getInt(2);
            totalPrice = rs.getDouble(3);
            output = String.format("%-20s %-18s %-15s", "Sales Rep", "Total units sold", "Total Value");
            System.out.println(output);
            output = String.format("%-20s %-18d £%-15.2f", name, total, totalPrice);
            System.out.println(output);
            count++;
            while (rs.next()) {
                name = rs.getString(1);
                total = rs.getInt(2);
                totalPrice = rs.getDouble(3);
                output = String.format("%-20s %-18d £%-15.2f", name, total, totalPrice);
                System.out.println(output);
                count++;
            }
        }
        if (count > 0) {
            System.out.println("\r\nQuery complete with " + count + " results! \r\n");
        } else {
            System.out.println("\r\nSorry.. no results! \r\n");
        }
        rs.close();

Решено:
У меня было 2 схемы для базы данных, и я использовал не ту (старая версия)

1 Ответ

1 голос
/ 31 марта 2011

Попробуйте использовать PreparedStatement вместо объединения ваших значений вместе.Я также рекомендую не печатать \r символов, если вы действительно не хотите перезаписывать с начала строки.Я переписал части вашего кода, чтобы показать, как я обычно это делаю;надеюсь, это будет работать для вас:

PreparedStatement ps = Connection.prepareStatement("SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value"
            + " FROM SalesRep, OrderLine, ShopOrder WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID"
            + " AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID"
            + " AND ShopOrder.OrderDate BETWEEN ? AND ?"
            + " GROUP BY SalesRep.SalesRepID, SalesRep.Name "
            + " ORDER BY Total_Value DESC";
try {
    ps.setDate(1, start);
    ps.setDate(2, finish);

    ResultSet rs = ps.executeQuery();
    try {
        String name;
        int total;
        double totalPrice;
        int count = 0;
        String output;

        while (rs.next()) {
            if (count == 0) {
                System.out.printf("%-20s %-18s %-15s\n", "Sales Rep", "Total units sold", "Total Value");
            }

            count++;
            System.out.println("Sales representative performace review from " + start + " to " + finish);
            name = rs.getString(1);
            total = rs.getInt(2);
            totalPrice = rs.getDouble(3);
            System.out.printf("%-20s %-18d £%-15.2f\n", name, total, totalPrice);
        }

        if (count > 0) {
            System.out.println("\nQuery complete with " + count + " results!\n");
        } else {
            System.out.println("\nSorry.. no results!\n");
        }
    }
    finally {
        rs.close();
    }
}
finally {
    ps.close();
}

Если это не сработает, у вас могут быть проблемы с часовыми поясами.Передайте объект Calendar в ps.setDate(...), чтобы изменить часовой пояс даты, которую вы проходите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...