Groovy Sql从列中获取最大值

时间:2011-04-08 15:42:34

标签: sql groovy

我有以下Groovy代码从'topic'表中的'id'列返回最大值:

 def rs = sql.executeQuery("select max(id) from topic")

 def maxId = rs.getLong(1)

它不起作用,我收到以下错误:

  

java.sql.SQLException:列索引无效       在oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)       at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)       at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209)...

有人知道正确的代码是什么吗? 感谢。

2 个答案:

答案 0 :(得分:6)

我认为如果你使用方法firstRow会更容易。您可以按名称或索引从结果对象中获取值。

按名称:

def row = sql.firstRow("select max(id) as max from topic")
def maxId = row.max

按索引:

def row = sql.firstRow("select max(id) from topic")
def maxId = row[0]

答案 1 :(得分:1)

似乎没有人提到#include "stdafx.h" class temp_value_t { private: intptr_t v; public: temp_value_t(const std::wstring& s) { v = (intptr_t)&s; }; temp_value_t(std::wstring&& s) { v = (intptr_t)&s; }; std::wstring&& get_as_temp() { return (std::wstring&&) (*(std::wstring*)v); }; const std::wstring& get_as_const() { return (const std::wstring&) (*(std::wstring*)v); }; }; void test(temp_value_t v, bool is_param_const) { std::wstring s; if(is_param_const) s = v.get_as_const(); else s = v.get_as_temp(); std::wcout << L"Inner = '" << s << L"'\n"; }; int _tmain(int argc, _TCHAR* argv[]) { { std::wcout << L"Test with temp:\n"; std::wstring s(L"abc"); test(s, false); std::wcout << L"Outer = '" << s << L"'\n"; } std::wcout << L"\n\n"; { std::wcout << L"Test with const:\n"; std::wstring s(L"abc"); test(s, true); std::wcout << L"Outer = '" << s << L"'\n"; } return 0; } /* VS2013 results: Test with temp: Inner = 'abc' Outer = '' Test with const: Inner = 'abc' Outer = 'abc' So all works fine... */ 中的索引超出范围。 获取字段使用起始索引0. 绑定字段使用起始索引1.为什么?历史SQL行为。