使用JDBC和null ResultSet的java临时表
我正在使用MS SQL驱动程序版本3.0通过标准的JDBC连接执行一个存储过程
我发现,当我创建数据并将其插入临时表时,存储过程无法正确执行
Java代码不会抛出异常,但是javax.sql.ResultSet
将是null
存储过程中的失败点是当我取消注释INSERT INTO #TBL CLM_NAME VALUES('VAL')
当我使用SQL Studio Manager执行语句时,它执行起来没有任何麻烦,数据也没有达到预期效果
有没有人遇到过这种情况,或者知道为什么会这样
起初我认为这是因为SQL驱动程序,现在我仍然认为是吗
谢谢
# 1 楼答案
也许this will help:
# 2 楼答案
我也面临同样的问题。为了解决这个问题,我将在sql server上设置一个跟踪,并在执行实际的SP调用之前查看MS JDBC驱动程序正在执行的所有语句。这应该能帮我把事情弄清楚。不幸的是,我们的DBA今天不在,所以我明天必须在她的帮助下完成。我会让你知道发生了什么,解决方法是什么
# 3 楼答案
executeQuery()用于返回结果集(通常是SELECT语句)的查询
executeUpdate()用于返回更新计数的INSERT、UPDATE、DELETE或DDL语句
JDBC认为上述两种(结果集和更新计数)都是“结果”。对于返回多个结果的查询,需要调用execute()
若存储过程使用临时表,则可能首先返回更新计数,然后返回结果集。您应该使用execute()运行查询,调用getMoreResults()跳过更新计数,然后调用getResultSet()获取所需的结果集。这里的问题是,我们必须通过多次调用getMoreResults()进行反复试验,才能通过调用getResultSet()获取所需的结果集
您可以通过指定“SET NOCOUNT ON”来抑制所有额外的“查询结果”,而不是上述的反复试验
所需的更改
将您的逻辑置于SP“SPCHILD”中。此存储过程将具有创建临时表的逻辑
创建一个SP“SPPARENT”,如下所示
从父SP“SPPARENT”中,您必须调用实际SP,即“SPCHILD”
从JDBC代码中,对“SPPARENT”进行SP调用