JDBC ResultSet returns 数据库中存储的值为空
JDBC ResultSet returns null from stored value in database
我尝试使用 Java 从 Vertica
数据库中获取结果集。
但它 returns null
.
SQL查询:
SELECT to_char(SUM(my_column)) FROM my_table
UNION ALL SELECT to_char(123) FROM dual
SQL 数据库客户端结果:
201198184560.13000
123
Java代码:
PreparedStatement ps;
ps = connection.prepareStatement(sqlQuery);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("Inside loop...");
String str = rs.getString(1);
Float f = rs.getFloat(1);
Double d = rs.getDouble(1);
Object obj = rs.getObject(1);
System.out.println("String: " + str + ", float: " + f + ", double: " + d + ", obj: " + obj);
}
java 控制台中的结果:
Inside loop...
String: null, float: 0.0, double: 0.0, obj: null
Inside loop...
String: 123, float: 123.0, double: 123.0, obj: 123
我做错了什么?
为什么结果集 returns 为空?
如何在 java 控制台中打印所有结果集?
更新1:
在 rs.next():
之前调试
rs = {S4ForwardResultSet@1015}
m_logger = {DSILogger@1028}
m_resultMetaData = {S4ResultSetMetaData@1045}
m_currentRow = 0
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1046}
m_resultSetColumns = {ArrayList@1038} size = 1
m_warningListener = {SWarningListener@1047}
m_wasLastValueNull = false
m_cachedDataWrappers = {ArrayList@1048} size = 1
m_cursorPosition = {CursorPosition@1049} "BEFORE_FIRST"
m_columnNameIndexes = {ArrayList@1050} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1030} "JDBC4"
m_streamBufferSize = 32000
更新2:
第一次 rs.next() 调试:
rs = {S4ForwardResultSet@1013}
m_logger = {DSILogger@1014}
m_resultMetaData = {S4ResultSetMetaData@1015}
m_currentRow = 1
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1016}
m_resultSetColumns = {ArrayList@1017} size = 1
m_warningListener = {SWarningListener@1018}
m_wasLastValueNull = true
m_cachedDataWrappers = {ArrayList@1019} size = 1
m_cursorPosition = {CursorPosition@1078} "AT_FIRST"
m_columnNameIndexes = {ArrayList@1021} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1022} "JDBC4"
m_streamBufferSize = 32000
调试 rs.next() 第二次:
m_logger = {DSILogger@1014}
m_resultMetaData = {S4ResultSetMetaData@1015}
m_currentRow = 2
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1016}
m_resultSetColumns = {ArrayList@1017} size = 1
m_warningListener = {SWarningListener@1018}
m_wasLastValueNull = false
m_cachedDataWrappers = {ArrayList@1019} size = 1
m_cursorPosition = {CursorPosition@1087} "AT_LAST"
m_columnNameIndexes = {ArrayList@1021} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1022} "JDBC4"
m_streamBufferSize = 32000
更新 3:SQL 看起来像这样:
with prov as
(select ...
from ...
join ...
on ...
where ...)
,
debet as
(select prov....
from prov
where ...
group by prov....
),
kredit as
(select prov....
from prov
where ...
group by prov....
)
select
TO_CHAR(SUM(debet.sum_debet_rur)) SSS
from
kredit full join debet
on ...
where (debet...) and (debet....)
UNION ALL SELECT TO_CHAR(123) SSS from dual
问题出在我的 SQL-查询中。
我的 JavaApp 从包含 --comments 的文件中获取 SQL-query。
在我的 JavaApp 将其转换为字符串并发送到数据库后。
在 Vertica 中,您可以使用查询检查您的查询:
select * from query_requests
order by start_timestamp desc
谢谢!
我尝试使用 Java 从 Vertica
数据库中获取结果集。
但它 returns null
.
SQL查询:
SELECT to_char(SUM(my_column)) FROM my_table
UNION ALL SELECT to_char(123) FROM dual
SQL 数据库客户端结果:
201198184560.13000
123
Java代码:
PreparedStatement ps;
ps = connection.prepareStatement(sqlQuery);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("Inside loop...");
String str = rs.getString(1);
Float f = rs.getFloat(1);
Double d = rs.getDouble(1);
Object obj = rs.getObject(1);
System.out.println("String: " + str + ", float: " + f + ", double: " + d + ", obj: " + obj);
}
java 控制台中的结果:
Inside loop...
String: null, float: 0.0, double: 0.0, obj: null
Inside loop...
String: 123, float: 123.0, double: 123.0, obj: 123
我做错了什么? 为什么结果集 returns 为空? 如何在 java 控制台中打印所有结果集?
更新1: 在 rs.next():
之前调试rs = {S4ForwardResultSet@1015}
m_logger = {DSILogger@1028}
m_resultMetaData = {S4ResultSetMetaData@1045}
m_currentRow = 0
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1046}
m_resultSetColumns = {ArrayList@1038} size = 1
m_warningListener = {SWarningListener@1047}
m_wasLastValueNull = false
m_cachedDataWrappers = {ArrayList@1048} size = 1
m_cursorPosition = {CursorPosition@1049} "BEFORE_FIRST"
m_columnNameIndexes = {ArrayList@1050} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1030} "JDBC4"
m_streamBufferSize = 32000
更新2: 第一次 rs.next() 调试:
rs = {S4ForwardResultSet@1013}
m_logger = {DSILogger@1014}
m_resultMetaData = {S4ResultSetMetaData@1015}
m_currentRow = 1
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1016}
m_resultSetColumns = {ArrayList@1017} size = 1
m_warningListener = {SWarningListener@1018}
m_wasLastValueNull = true
m_cachedDataWrappers = {ArrayList@1019} size = 1
m_cursorPosition = {CursorPosition@1078} "AT_FIRST"
m_columnNameIndexes = {ArrayList@1021} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1022} "JDBC4"
m_streamBufferSize = 32000
调试 rs.next() 第二次:
m_logger = {DSILogger@1014}
m_resultMetaData = {S4ResultSetMetaData@1015}
m_currentRow = 2
m_currentStream = null
m_isOpen = true
m_resultSet = {VResultSet@1016}
m_resultSetColumns = {ArrayList@1017} size = 1
m_warningListener = {SWarningListener@1018}
m_wasLastValueNull = false
m_cachedDataWrappers = {ArrayList@1019} size = 1
m_cursorPosition = {CursorPosition@1087} "AT_LAST"
m_columnNameIndexes = {ArrayList@1021} size = 1
m_numColumns = 1
m_parentStatement = {VerticaJdbc4PreparedStatementImpl@996}
m_jdbcVersion = {JDBCVersion@1022} "JDBC4"
m_streamBufferSize = 32000
更新 3:SQL 看起来像这样:
with prov as
(select ...
from ...
join ...
on ...
where ...)
,
debet as
(select prov....
from prov
where ...
group by prov....
),
kredit as
(select prov....
from prov
where ...
group by prov....
)
select
TO_CHAR(SUM(debet.sum_debet_rur)) SSS
from
kredit full join debet
on ...
where (debet...) and (debet....)
UNION ALL SELECT TO_CHAR(123) SSS from dual
问题出在我的 SQL-查询中。
我的 JavaApp 从包含 --comments 的文件中获取 SQL-query。 在我的 JavaApp 将其转换为字符串并发送到数据库后。
在 Vertica 中,您可以使用查询检查您的查询:
select * from query_requests
order by start_timestamp desc
谢谢!