将数据类型从存储过程输出映射到 java 数据类型时遇到问题
使用 SQLServer,我最初得到以下 2 个表 - 无法更改它们的定义。
CREATE TABLE [dbo].[tblDetail](
...
[dCdeType] [dbo].[Tcde] NOT NULL,
[dCdeState] [dbo].[Tvch] NOT NULL,
...
)
CREATE TABLE [dbo].[tblAP](
...
[apChState] [char](2) NOT NULL,
[apChTaxType] [char](2) NOT NULL,
...
)
我创建了第三张表 - 如果需要,我可以更改其定义。
CREATE TABLE [dbo].[tblTempAP](
...
[tpChState] [char](2) NOT NULL,
[tpChTaxType] [char](2) NOT NULL,
...
)
我有一个存储过程“sp_MyProcedure”,它使用 Hibernate(版本 3.1.3)从 Java 应用程序中多次调用。
存储过程从 tblDetails 中进行选择并将记录插入到 tblTempAP。然后它从 tblAP 做同样的事情
select <list of fiields> into #tempD from tblDetails
...some logic...
INSERT INTO [dbo].[tblTempAP]
(...
,[tpChType]
,[tpChState]
...
)
select <list of fields> from #TempD
............some logic .....
select <list of fiields> into #tempA from tblAP
...
INSERT INTO [dbo].[tblTempAP]
(...
,[tpChType]
,[tpChState]
...
)
select <list of fields> from #TempA
根据某些标准,表 tblTempAP 也可以有“更新”以及“某些逻辑”。但我质疑的 2 个字段 - 数据类型是相同的。“sp_MyProcedure”我们每次从Java循环调用不同的参数,这样可以保证每次插入tblTempAP的数据都是不同的。
在存储过程结束时,我做
select <some fileds, including the 2 mentioned>
from tblTempAP
where <some criterias>
输出采用 Java 并根据业务逻辑进行处理、累积。
Java 代码
String queryString = "{ call sp_MyProcedure(?) }";
Query q;
List resultList;
try {
q = session.createSQLQuery(queryString);
q.setInteger(0, port);
resultList = q.list();
}
catch (HibernateException hex) {
throw new TaxPartnersSystemException("My Exception");
}
这是问题,我需要帮助! 在应用程序运行结束时,我填充了 tblTempAP,在 SQL Server Management Studio 中查看时看起来不错。但是,java 端的 resultList 中的数据有问题 - 我用调试器查看它,检查元素 - 到来的状态只有一个字符 - 所以 tblTempAP 中的“NY”将是“N”,“CA” - 将是“C”。类型字段相同。那些是单个字符的是正确的。但是,像“03”这样的东西会是“0”,“34”会变成“3”。
我认为这是休眠 API 中的映射
请帮忙 !!问题出在哪里?以及如何解决?请记住,我不能更改 2 个初始表 - 这是给定的。
我不在存储过程中使用 Cast 或 Convert。如果我应该,请告诉我在哪里?从前 2 个表中选择时?或者在插入/更新第三个时?
提前致谢