后台:我使用Spring将Sybase存储过程返回值映射到java对象。
例如,我在Sybase中将varchar
的Sybase数据类型映射为String
类型,在Java中将Sybase数据类型int
映射为int
类型等。
我在其中一个存储过程中遇到了以下代码:
SELECT DISTINCT
A.Col1 AS val1,
A.Col2 AS val2,
NULL AS someVal,
A.col3 AS val3,
...
A.col9 AS val9
FROM #SomeTable A
ORDER BY Col2, Col3
我有两个相关的问题:
Null
在这种情况下的含义是什么?我很困惑这里发生了什么。
我能够通过查看存储过程中先前定义的表A的表定义来确定Col1,Col2等的数据类型。因此我知道我可以在我的Java对象中为val1,val2等定义什么数据类型。但是“someVal”呢?我应该为这个Null值执行什么数据类型映射?
我对SQL很缺乏经验。也许答案比我意识到的要简单得多。
答案 0 :(得分:3)
这会在所有行中创建一个NULL
个值的列。
someVal
,处理此列缺失为错误的情况,或UNION ALL
查询中GROUP BY
查询的一部分,其他查询填写了NULL
s的值。以下是后一种情况的示例:
SELECT -- This query flattens the results of the two sub-queries
document_id
, MIN(approval_date) as approval_date
, MIN(availability_date) as availability_date
FROM (
SELECT -- This subquery supplies approval_date
document_id
, MAX(approval_date) AS approval_date
, NULL AS availability_date
FROM document_approvals
GROUP BY document_id
UNION ALL
SELECT -- This subquery supplies availability_date
document_id
, NULL AS approval_date
, MAX(availability_date) AS availability_date
FROM document_approvals
GROUP BY document_id
)
GROUP BY document_id
答案 1 :(得分:2)
您将有一个名为someVal
的列,其中NULL
为每行的值。
使用ResultSet
,您可以使用getString(int)
或getString(String)
说明
返回:列值;如果值为SQL NULL,则为值 返回为null
您可以选择所需的任何参考类型,包括Void
,以映射此列。或者不要使用任何,即。不要映射它。取决于您的要求。