我有以下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)...
有人知道正确的代码是什么吗? 感谢。
答案 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行为。