繁体   English   中英

通过JDBC运行PL / SQL和T-SQL

[英]Running PL/SQL and T-SQL Through JDBC

我想知道通过JDBC运行PL / SQL或T-SQL代码块的最佳方法是什么。

更具体地说 - 应该使用什么JDBC API来执行返回ResultSet的PL / SQL或T-SQL块?

更新:

更具体地说 - 我有一个通用代码,它接收SQL代码(可能是SQL,PL / SQL或T-SQL)作为输入,根据所需的数据库加载相应的JDBC驱动程序,并执行给定的SQL代码,如下所示:

  Statement stmt = conn.createStatement (); 
  ResultSet rs = stmt.executeQuery("BEGIN some code END SELECT * FROM MY_TABLE");
  while (rs.next ()) {
     System.out.println (rset.getString (1));
  }

例如,在使用某些T-SQL或PL / SQL对象(如游标)时,不会返回ResultSet

所以,我想知道这个JDBC API是否是执行此类查询的最佳方式。 如果是,那么我正在使用的特定JDBC驱动程序实现中必定存在错误。

CallableStatement通常是要走的路。 此链接提供了如何在Oracle中执行此操作的示例:

使用光标变量

请注意,您获得了Cursor ,而不是ResultSet

在T-SQL(我不太清楚)中,带有executeQueryCallableStatement应该按预期工作,请参阅此链接:

JDBC:CallableStatement

您需要事先提供连接信息以执行SQL。 您无法从SQL推断数据库。 因此,我认为没有任何此类API可用于处理此类查询。

您可以使用标准JDBC API。 这里的一个例子:

import java.sql.*; 
import oracle.jdbc.pool.OracleDataSource;

class JdbcTest { 
   public static void main (String args []) throws SQLException { 
      // Create DataSource and connect to the local database
      OracleDataSource ods = new OracleDataSource();
      ods.setURL("jdbc:oracle:thin:@//myhost:1521/orcl");
      ods.setUser("scott");
      ods.setPassword("tiger");
      Connection conn = ods.getConnection();

      // Query the employee names 
      Statement stmt = conn.createStatement (); 
      ResultSet rset = stmt.executeQuery ("SELECT ename FROM emp");
      // Print the name out 
      while (rset.next ())
         System.out.println (rset.getString (1));

      //close the result set, statement, and the connection
      rset.close();
      stmt.close();
      conn.close();
   } 
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM