JDBC SQL SERVER:该语句未返回结果集

我正在从Microsoft SQL Server Studio执行以下查询,该查询工作正常并显示结果:

SELECT * INTO #temp_table FROM md_criteria_join WHERE user_name = 'tecgaw' UPDATE #temp_table SET user_name = 'tec' WHERE user_name != 'tec' SELECT * FROM md_criteria_join WHERE user_name = 'tec' AND view_name NOT IN (SELECT view_name FROM md_criteria_join WHERE user_name = 'tecgaw') UNION SELECT * FROM #temp_table ORDER BY view_name, user_name, crit_usage_seq, crit_join_seq 

但是,如果我在Java中执行相同的查询,则会抛出exception,指出“语句未返回结果集”。 这是Java代码:

 statement = conn.getConnection().createStatement(); resultSet = stmt.executeQuery(sql.toString()); 

是因为我不能在一个语句中执行多个SQL查询(即,创建#temp_table ,更新它,然后使用我的select语句)?

我在StackOverflow中找到了类似的问题。 您应该启用连接以支持多个语句并使用它们分开; 。 具体的例子请看答案。 但它只适用于MySql。

另外我认为你可以将SQL重写为单个查询

 SELECT columnA, columnB, 'tec' as user_name from md_criteria_join WHERE ( user_name = 'tec' AND view_name NOT IN ( SELECT view_name FROM md_criteria_join WHERE user_name = 'tecgaw') ) OR user_name = 'tecgaw' ORDER BY view_name, user_name, crit_usage_seq, crit_join_seq 

另一种选择是将语句移动到存储过程并使用CallableStatement从JDBC中调用它

或许你应该尝试用这样的多个jdbc语句执行它

 Connection conn = conn.getConnection(); //just to make sure its on single connection conn.createStatement("SELECT INTO #temp_table").executeUpdate(); conn.createStatement("UPDATE #temp_table").executeUpdate(); conn.createStatement("SELECT ...").executeQuery(); 

请注意,您必须关闭资源,并且为了获得更好的性能,您可以使用addBatch和executeBatch方法

JDBC因行数而变得混乱。

您需要使用SET NOCOUNT ON

使用execute语句进行数据操作,insert,update和delete ,使用executeQuery进行数据检索,select

我建议你将你的程序分成两个语句,一个是execute ,一个是executeQuery

如果您不希望这样做,请尝试用分号分隔语句。 但是如果这给你一个结果集,我不确定这个动作。

在ms sql中你还必须在存储过程开始时设置nocount,同时用“;”终止select / update / insert块语句。