Java 在一次调用中执行多个SQL语句

Java 在一次调用中执行多个SQL语句,java,database,jdbc,Java,Database,Jdbc,我有一个更新SQL,比如“updatet T SET d=d*2”,然后查询更新后的值,比如“SELECT d FROM T”。是否可以使用一个SQL调用在JDBC中实现这一点?谢谢 不,在普通SQL中已经不可能混合DML和SELECT查询,所以JDBC不能为您做任何事情。如果在一个事务中需要,您至少需要触发两个查询。另一种选择是一个存储过程,您可以通过一个单独的命令来执行,但对于这个特定的简单目的来说,它过于复杂了。不,在普通SQL中,混合使用DML和SELECT查询已经不可能了,所以JDBC

我有一个更新SQL,比如“
updatet T SET d=d*2
”,然后查询更新后的值,比如“
SELECT d FROM T
”。是否可以使用一个SQL调用在JDBC中实现这一点?谢谢

不,在普通SQL中已经不可能混合DML和SELECT查询,所以JDBC不能为您做任何事情。如果在一个事务中需要,您至少需要触发两个查询。另一种选择是一个存储过程,您可以通过一个单独的命令来执行,但对于这个特定的简单目的来说,它过于复杂了。

不,在普通SQL中,混合使用DML和SELECT查询已经不可能了,所以JDBC不能为您做任何事情。如果在一个事务中需要,您至少需要触发两个查询。另一种方法是一个存储过程,您可以通过一个单独的命令来执行,但对于这个特殊的简单目的来说,它过于复杂了。

您可以使用Oracle的RETURNING INTO子句将结果转换为pl/sql中的一个变量。类似于pl/sql内部的情况,但是使用简单的sql实现相同的结果可能是不可能的

顺便问一下,你用的是什么数据库

SQL> declare
  2     l_empno number := 7369;
  3     l_sal_initial number;
  4     l_sal_updated number;
  5  begin
  6     select sal
  7        into l_sal_initial
  8        from emp
  9        where empno= l_empno;
 10     dbms_output.put_line('initial sal is.. ' || l_sal_initial);
 11  
 12     update emp 
 13         set sal = sal*2
 14         where empno = l_empno
 15         returning sal into l_sal_updated;
 16  
 17     dbms_output.put_line('final sal is ...' || l_sal_updated);
 18  
 19     rollback;
 20  end;
 21  /

PL/SQL procedure successfully completed.

SQL> set serveroutput on;
SQL> /
initial sal is.. 800
final sal is ...1600

您可以使用Oracle的RETURNING INTO子句将结果放入pl/sql中的变量中。类似于pl/sql内部的情况,但是使用简单的sql实现相同的结果可能是不可能的

顺便问一下,你用的是什么数据库

SQL> declare
  2     l_empno number := 7369;
  3     l_sal_initial number;
  4     l_sal_updated number;
  5  begin
  6     select sal
  7        into l_sal_initial
  8        from emp
  9        where empno= l_empno;
 10     dbms_output.put_line('initial sal is.. ' || l_sal_initial);
 11  
 12     update emp 
 13         set sal = sal*2
 14         where empno = l_empno
 15         returning sal into l_sal_updated;
 16  
 17     dbms_output.put_line('final sal is ...' || l_sal_updated);
 18  
 19     rollback;
 20  end;
 21  /

PL/SQL procedure successfully completed.

SQL> set serveroutput on;
SQL> /
initial sal is.. 800
final sal is ...1600

所有这些都很好,除了与Java和JDBC有关的查询,可能是针对非Oracle数据库的查询。所有这些都很好,除了与Java和JDBC有关的查询,可能是针对非Oracle数据库的查询。