相关文章推荐
紧张的铅笔  ·  GOTO (Transact-SQL) - ...·  2 周前    · 
开心的山羊  ·  在 SSM ...·  2 年前    · 
爱看书的盒饭  ·  批处理(bat) ...·  2 年前    · 

适用于: SQL Server 2019 (15.x) 及更高版本

SQL Server 语言扩展 功能使用 sp_execute_external_script 系统存储过程作为接口来调用 Java 运行时。

本操作说明文章介绍了在 SQL Server 上执行的 Java 类和方法的实现详细信息。

放置 Java 类的位置

可以采用两种方法在 SQL Server 中调用 Java 类:

  • .class .jar 文件放置在 Java classpath 中。

  • 使用 外部库 DDL 将已编译的类上传到 .jar 文件中,并且将其他依赖项上传到数据库中。

    通常建议使用 .jar 文件而不是单独的 .class 文件。 这在 Java 中是常见的做法,这将使整体体验更加轻松。 另请参阅 从类文件创建 Java .jar 文件

    使用 Classpath

    下面是在 SQL Server 上执行 Java 时的一些基本原则。

  • 已编译的自定义 Java 类必须存在于 Java classpath 中的 .class 文件或 .jar 文件中。 CLASSPATH 参数 提供已编译的 Java 文件的路径。

  • 所调用的 Java 方法必须在存储过程上的 script 参数中提供。

  • 如果类属于某个包,则必须提供 packageName

  • params 用于将参数传递到 Java 类。 不支持调用需要参数的方法。 因此,形参是将实参值传递到方法的唯一方式。

    此说明重述了 SQL Server 2019 (15.x) 及更高版本中特定于 Java 的受支持和不受支持的操作。 在存储过程中,支持输入参数,而不支持输出参数。

    调用 Java 类

    sp_execute_external_script 系统存储过程是用于调用 Java 运行时的接口。 以下示例显示了使用 Java 扩展的 sp_execute_external_script 以及用于指定路径、脚本和自定义代码的参数。

    无需定义要调用的方法。 默认情况下,会调用名为 execute 的方法。 这意味着需要遵循 SQL Server 用于 Java 的 Microsoft 扩展性 SDK ,并在 Java 类中实现 execute 方法。

    DECLARE @param1 INT
    SET @param1 = 3
    EXEC sp_execute_external_script @language = N'Java',
        @script = N'<packageName>.<ClassName>',
        @input_data_1 = N'<Input Query>',
        @param1 = @param1;
    

    设置 CLASSPATH

    在编译一个或多个 Java 类或在 Java .jar 中创建 classpath 文件后,有两个选项可用于向 SQL Server Java 扩展提供路径:

  • 使用外部库

    最简单的选项是通过创建外部库并将此库指向 jar 来使 SQL Server 自动找到你的类。 使用 Java 的外部库

  • 注册系统环境变量

    你可以创建系统环境变量,并提供指向包含这些类的 .jar 文件的路径。 创建名为 CLASSPATH 的系统环境变量。

    使用外部库

    在 SQL Server 2019 (15.x) 及更高版本中,可以在 Windows 和 Linux 上使用适用于 Java 语言的外部库。 可以使用 CREATE EXTERNAL LIBRARY DDL 将类编译到 .jar 文件中,并将 .jar 文件和其他依赖项上传到数据库中。

    如何使用外部库上传 .jar 文件的示例:

    CREATE EXTERNAL LIBRARY myJar
    FROM (CONTENT = '<local path to .jar file>')
    WITH (LANGUAGE = 'Java');
    

    创建外部库时,SQL Server 将自动具有对 Java 类的访问权限,并且无需将任何特殊访问权限设置为 classpath。

    以下代码是从上传为外部库的包调用类中的方法的示例:

    EXEC sp_execute_external_script
        @language = N'Java',
        @script = N'MyPackage.MyCLass',
        @input_data_1 = N'SELECT * FROM MYTABLE'
    WITH RESULT SETS((column1 INT));
    

    有关详细信息,请参阅 CREATE EXTERNAL LIBRARY

    到 SQL Server 的环回连接

    使用环回连接通过 JDBC 连接回 SQL Server,以从 sp_execute_external_script 执行的 Java 中读取或写入数据。 当无法使用 sp_execute_external_scriptInputDataSetOutputDataSet 参数时,可以使用此功能。 若要在 Windows 中建立环回连接,请使用以下示例:

    jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
    

    若要在 Linux 中建立环回连接,JDBC 驱动程序需要以下证书中定义的三个连接属性:

    Client-Certificate-Authentication

  • 教程:在 Java 中使用正则表达式 (regex) 搜索字符串
  •