使用预编译的语句支持 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用预编译的语句支持

Amazon Redshift JDBC 驱动程序支持预编译的语句。您可以使用预编译的语句来提高需要在同一连接过程中多次运行的参数化查询的性能。

预编译的语句是在服务器端编译但不立即运行的 SQL 语句。在关闭对象或连接之前,已编译的语句作为 PreparedStatement 对象存储在服务器上。当该对象存在时,您可以根据需要使用不同的参数值多次运行预编译的语句,而无需再次编译该语句。此操作降低了开销,可以更快地运行一组查询。

有关预编译语句的更多信息,请参阅来自 Oracle 的 JDBC 基础知识教程中的“使用预编译语句”。

您可以预编译包含多个查询的语句。例如,以下预编译语句包含两个 INSERT 查询:

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO MyTable VALUES (1, 'abc'); INSERT INTO CompanyTable VALUES (1, 'abc');");

请注意,这些查询不依赖于在同一预编译语句内指定的其他查询的结果。由于查询在预编译步骤期间未运行,因此尚未返回结果,并且不可用于同一预编译语句中的其他查询。

例如,不允许使用以下预编译语句,该语句将创建一个表,然后将值插入到该新创建的表中:

PreparedStatement pstmt = conn.prepareStatement("CREATE TABLE MyTable(col1 int, col2 varchar); INSERT INTO myTable VALUES (1, 'abc');");

如果您尝试预编译此语句,服务器将返回一个错误,指出目标表 (myTable) 尚不存在。必须先运行 CREATE 查询,然后才能预编译 INSERT 查询。