Агрегатные функции JDBC ResultSet - PullRequest
0 голосов
/ 08 марта 2012

Редактировать: упс.Эти заявления JDBC работают;Я забыл зафиксировать в SQL Plus.Спасибо, Павел.

Когда я запрашиваю базу данных с помощью SQL Plus:

select count(tid) from retweets where tid = 35          => 2
select count(tid) from tweets where replyto = 35        => 1

Я пробовал несколько способов получить эти статистические значения из базы данных через JDBC, но во всех случаях они возвращались0.

Примеры:

Statement stmt = m_con.createStatement();
ResultSet retweets = stmt.executeQuery("select count(tid) from retweets where tid = 35");

if (retweets.next()) {  System.out.println("# of Retweets: " + retweets.getInt(1));}
 ResultSet replies = stmt.executeQuery("select count(tid) Replies from tweets where replyto = "+tid);


if (replies.next()) {System.out.println("# of Replies : " + replies.getInt("Replies"));}

Оба раза было напечатано 0.Почему это произошло и как я могу это исправить?Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

Примерно так:

public class TweetDao {
    private static final String SELECT_TWEETS = "SELECT COUNT(tid) as TC FROM TWEETS WHERE replyTo =  ? ";
    // inject this - setter or constructor
    private Connection connection;

    public int getTweetCount(int tid) throws SQLException {
        int tweetCount = -1;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = this.connection.prepareStatement(SELECT_TWEETS);
            ps.setInt(1, tid);
            rs = ps.executeQuery();
            while (rs.hasNext()) {
                tweetCount = rs.getInt("TC");
            }
        } finally {
            DatabaseUtils.close(rs);
            DatabaseUtils.close(ps);
        }
        return tweetCount;
    }
}
1 голос
/ 08 марта 2012

Попробуйте PreparedStatement:

String sql = "select count(tid) from retweets where tid = 35";
PreparedStatement stmt = m_con.prepareStatement(sql);
0 голосов
/ 14 февраля 2013
**try {
            ps = this.connection.prepareStatement(SELECT_TWEETS);
            ps.setInt(1, tid);
            rs = ps.executeQuery();
            while (rs.hasNext()) {
                tweetCount = rs.getInt("TC");
            }
        } finally {
            DatabaseUtils.close(rs);`enter code here`**

Я думаю, что здесь нет необходимости использовать цикл while, потому что мы получаем только один результат.Пожалуйста, дайте мне знать, если я ошибаюсь.

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