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

3
我想知道通过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驱动程序实现中一定存在错误。


使用execute("在此处放置您的PL/SQL块"),然后使用Statement.getResultSet()。查看JavaDocs,它甚至为此提供了示例。 - user330315
2个回答

2

CallableStatement通常是一个不错的选择。以下链接提供了在Oracle中如何使用它的示例:

使用游标变量

请注意,您将获得一个Cursor,而不是ResultSet

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

JDBC:CallableStatement


谢谢@ammoQ。CallableStatement适用于普通的SQL代码吗?我的查询是动态的,我不知道它的实际类型。 - zuckermanori
我不是绝对确定(你需要尝试一下),但规范说CallableStatement用于执行存储过程,所以我不希望它能够处理普通的SQL查询。结果可能取决于所使用的数据库系统和驱动程序。 - Erich Kitzmueller

0

在执行 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();
   } 
} 

这在纯SQL方面运作良好,但似乎并不支持所有T-SQL操作。 - zuckermanori
@zuckermanori:- 是的,你能更具体地说明你想要实现什么吗?你可以参考这个链接,了解如何使用JDBC连接到MySQL。 - Rahul Tripathi
如果我理解正确的话,你想要的是SQL查询中的数据库信息,这是不可能的,因此我认为没有这样的API存在。(如果我误解了,请纠正我) - Rahul Tripathi
你误解了。我有数据库信息。我想要运行一个动态的SQL代码(可能是SQL、PL/SQL或T-SQL),返回结果,并读取这些结果。 - zuckermanori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接