繁体   English   中英

JDBC ResultSet从数据库中的存储值返回null

[英]JDBC ResultSet returns null from stored value in database

我尝试使用Java从Vertica数据库中获取ResultSet。 但是它返回null

SQL查询:

SELECT to_char(SUM(my_column)) FROM my_table
UNION ALL SELECT to_char(123) FROM dual

DB客户端中的SQL结果:

201198184560.13000
123

sql_result

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

我究竟做错了什么? 为什么结果集返回null? 如何在Java控制台中打印我所有的结果集?

Update1:​​在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

Update2:第一次进行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

Update3: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查询。 在我的JavaApp将其转换为String并发送到DB之后。

在Vertica中,您可以使用查询检查查询:

select * from query_requests
order by start_timestamp desc

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM