PostgreSQL MAX聚合函数应用于字符串和Java结果集

时间:2014-10-06 09:54:36

标签: java string postgresql max aggregate-functions

您好,感谢您阅读我的帖子。

我有一个PostgreSQL表" t"用一列" c"哪种类型是"字符变化(32)"。

此列中的值如下所示:" 2014100605"。

我正在使用" MAX()"用于检索此列中最大值的聚合函数。

SELECT MAX(c) AS max FROM t;

在Java中,如果我准备上面的查询,请获取" resultSet"对象并发送getString(" max")消息,我得到max = null。

如果我发送getInt(" max")方法,我会得到我期待的结果,例如" 2014100605"。

这是正常行为吗?

我真的被允许这样做,还是偶然得到了预期的结果?

是" MAX()"实际上使用字典顺序?

最好的问候。

一些Java代码:

s_preparedSqlQuery = 
  "SELECT MAX(quotinv_nro) AS quotinv_nro_max "
+ "FROM imw_quotation_invoice "
+ "WHERE quotinv_type = ? "
+ "AND quotinv_nro LIKE '" + s_quotinvDate + "%'";

preparedStatement = m_connection.prepareStatement(s_preparedSqlQuery);
preparedStatement.setString(1, s_quotinvType);
resultSet = preparedStatement.executeQuery();

if(resultSet != null)
{
    if(resultSet.next())
    {
        // s_quotinvNroMax = resultSet.getString("quotinv_nro_max");
        n_quotinvNroMax = resultSet.getInt("quotinv_nro_max");

        // if(s_quotinvNroMax == null)
        if(n_quotinvNroMax == 0)
        {
            n_nbQuotinvsThisSameDate = 0;
            return n_nbQuotinvsThisSameDate;
        }
        else
        {
            s_quotinvNroMax = Integer.toString(n_quotinvNroMax);
            n_length = s_quotinvDate.length();
            s_currentMaxNro = s_quotinvNroMax.substring(n_length - 1);
            n_nbQuotinvsThisSameDate = Integer.valueOf(s_currentMaxNro);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您正在使用唯一的Id列....

int maxID = 0;
Statement s2 = con.createStatement();
s2.execute("SELECT MAX(UniqueId) FROM MyTable");    
ResultSet rs2 = s2.getResultSet(); 

if (rs2.next()) 
{
  maxID = rs2.getInt(1);
}

如果您正在使用任何其他非键列......

int maxID = 0;
Statement s2 = con.createStatement();
s2.execute("SELECT MAX(ColumnValue) FROM MyTable");    
ResultSet rs2 = s2.getResultSet(); 

while (rs2.next()) 
{
  maxID = rs2.getInt(1);
}