使用语句和结果集

使用 Microsoft JDBC Driver for SQL Server 及其提供的 Statement 和 ResultSet 对象时，可使用多种技术来提高应用程序的性能和可靠性。

# 使用适当的语句对象

使用 JDBC 驱动程序的某个 Statement 对象时（如 SQLServerStatement、SQLServerPreparedStatement 或 SQLServerCallableStatement 对象），请确保所使用的对象适用于您的作业。

- 如果不带 OUT 参数，则无需使用 SQLServerCallableStatement 对象。而是使用 SQLServerStatement 或 SQLServerPreparedStatement 对象。

- 如果不想多次执行语句或不带 IN 或 OUT 参数，则无需使用 SQLServerCallableStatement 或 SQLServerPreparedStatement 对象。而是使用 SQLServerStatement 对象。

# 为 ResultSet 对象使用适当的并发

创建生成结果集的语句时，不要请求可更新的并发，除非您的实际意图就是更新这些结果。对于读取较小的结果集来说，默认的只进、只读游标模型速度最快。

# 限制结果集的大小

考虑使用 setMaxRows 方法（或 SET ROWCOUNT 或 SELECT TOP N SQL 语法）来限制从可能较大的结果集中返回的行数。如果必须处理大型结果集，请考虑通过设置连接字符串属性 responseBuffering=adaptive（默认模式）来使用自适应响应缓冲。此方法使应用程序无需服务器端游标即可处理大型结果集，并最大限度地减少应用程序使用的内存。有关详细信息，请参阅使用自适应缓冲。

# 使用适当的提取大小

对于只读服务器游标，需要权衡的是与服务器之间的往返通信与驱动程序所使用的内存量。对于可更新的服务器游标，提取大小还会影响结果集对更改的敏感度和服务器上的并发。在显式调用 refreshRow 方法或游标离开提取缓冲区之前，当前提取缓冲区中的行更新并不可见。如果使用 CONCUR_SS_SCROLL_LOCKS (1009)，则较大的提取缓冲区具有较好的性能（较少的服务器往返通信），但具有较低的更改敏感度且服务器上的并发会减少。若要获得最大的更改敏感度，请将提取大小设为 1。然而，需要注意的是，这样会导致每提取一行就发生一次服务器往返通信。

# 对较大的 IN 参数使用流

可使用已逐渐具体化的流或 BLOB 和 CLOB，来处理对较大的列值的更新或对较大的 IN 参数的发送。JDBC 驱动程序通过多次往返通信将其“分块”发送到服务器，这样您便可以设置和更新超出内存允许范围的值。

# 请参阅

借助 JDBC 驱动程序提高性能和可靠性
发送有关本主题的反馈至 Microsoft。

© 2012 Microsoft。保留所有权利。