Koe*_*box 5 java sql-server-2005 jdbc temp-tables
我正在使用MS SQL驱动程序3.0版通过标准JDBC连接执行存储过程.
我发现当我创建数据并将数据插入临时表时,存储过程无法正常执行.
Java代码不会抛出异常,但javax.sql.ResultSet会是null.
存储过程中的失败点是我取消注释的时候 INSERT INTO #TBL CLM_NAME VALUES('VAL')
当我使用SQL Studio Manager执行语句时,它可以毫无困难地执行,并且数据按预期执行.
有没有人遇到这个或知道为什么会这样?
最初我认为它是因为SQL驱动程序,我仍然认为它是?
谢谢.
Rad*_*scu 13
也许这会有所帮助:
建议如果要使用临时表,则不应调用"prepareStatement".您可以直接从语句对象执行查询.
例如:
Run Code Online (Sandbox Code Playgroud)String sql = "select uuid, name from Component"; Statement stmt = dbCon.createStatement(); ResultSet rs = stmt.executeQuery(sql);如果必须调用"prepareStatement",则需要创建一个真实的表,如果需要,之后删除该表.
executeQuery()旨在与返回ResultSet的查询一起使用,通常是SELECT语句.
executeUpdate()用于返回更新计数的INSERT,UPDATE,DELETE或DDL语句.
上述两个(ResultSet和更新计数)都被JDBC视为"结果".对于返回多个结果的查询,它需要我们调用execute().
如果存储过程使用临时表,则可能首先返回更新计数,然后返回ResultSet.您应该使用execute()来运行查询,调用getMoreResults()来跳过更新计数,然后调用getResultSet()来获取所需的ResultSet.这里的问题是我们必须多次调用getMoreResults()来通过调用getResultSet()获取我们想要的结果集来进行反复试验.
您可以通过指定" SET NOCOUNT ON " 来抑制所有额外的"查询结果",而不是上面的反复试验.
需要更改,
把你的逻辑放在SP"SPCHILD"中.此存储过程将具有逻辑以及临时表创建.
创建一个SP"SPPARENT",如下所示,
CREATE PROCEDURE [dbo].[SPPARENT] @Id int = NULL
AS
BEGIN
SET NOCOUNT ON;
EXEC(' SPCHILD @Id = ' + @Id)
END
Run Code Online (Sandbox Code Playgroud)
从父SP"SPPARENT"您必须调用您的实际SP即"SPCHILD".
从您的JDBC代码中进行SP调用"SPPARENT".
| 归档时间: |
|
| 查看次数: |
11292 次 |
| 最近记录: |