以下列出了在 SQL Anywhere 11.0.0 版中引入的编程接口增强。
新的 SQL Anywhere C API SQL Anywhere C 应用程序编程接口 (API) 简化了为多种解释性编程语言创建 C 和 C++ 包装驱动程序的过程,这类解释性编程语言包括 PHP、Perl、Python 和 Ruby。SQL Anywhere C API 处于 DBLIB 库的最上层,采用嵌入式 SQL 实现。
虽然 SQL Anywhere C API 不能替代 DBLIB,但可以简化使用 C 和 C++ 创建应用程序的过程。使用 SQL Anywhere C API 无需对嵌入式 SQL 具有很深的了解。请参见SQL Anywhere C API 支持。
新的 Python 数据库 API (sqlanydb) 通过 Python 数据库 API (sqlanydb),可从使用 Python 编写的脚本访问 SQL Anywhere 数据库。sqlanydb 模块及扩展执行 Python Database API Specification 2.0 版。请参见Python 支持。
外部环境 SQL Anywhere 现在包括对以下六个外部运行时环境的支持:Java、Perl、PHP、CLR、嵌入式 SQL 和 ODBC。SQL Anywhere 支持调用以 C 或 C++ 语言编写的编译后本地函数已有一段时间了。但是,当服务器运行这些过程时,始终由数据库服务器装载动态链接库或共享对象,并且始终由数据库服务器执行对本地函数的调用。这样做的风险是,如果本地函数导致故障,则会使数据库服务器崩溃。所以,在数据库服务器的外部(即在外部环境中)运行已编译的本地函数,可以消除服务器的这些风险。请参见SQL Anywhere 外部环境支持。
要利用此新功能,需要将数据库升级。请参见SQL Anywhere 服务器升级。
对 PHP 外部环境的支持 SQL Anywhere 11.0.0 包含各个 PHP 版本(包括 5.1.1 到 5.1.6 以及 5.2.0 到 5.2.6)的多种预先生成的二进制文件。如果您已经在服务器计算机上安装了这些版本之一,则应使用 SQL Anywhere 预先生成的二进制文件而不是构建 PHP 外部环境。请注意,对于 Linux 和 Solaris,同时提供 32 位和 64 位版本的这些二进制文件。对于 Windows 和其它系统,仅提供 32 位版本。
如果已经安装了与上述 PHP 版本不同的版本,则必须生成该软件,或者将您的 PHP 版本转换为与 SQL Anywhere 预先生成的版本匹配的版本。有关生成 SQL Anywhere PHP 模块的说明,请参见SQL Anywhere PHP 扩展。
对 Perl 外部环境的支持 非常重要的是,要在尝试使用 Perl 外部环境之前更新 SQL Anywhere Perl DBD 驱动程序的版本。如果未更新 Perl DBD 驱动程序,则服务器端的 Perl 将不会工作。
此外,与 PHP 不同的是,SQL Anywhere 没有为 Perl 的各个版本准备预先生成的二进制文件。SQL Anywhere Perl DBD 驱动程序的源代码位于 %SQLANY11%\SDK\perl 中。有关生成 SQL Anywhere Perl DBD 驱动程序的说明,请参见Perl DBI 支持。
对于 UTF-8 URL 的 Web 服务器支持 以前,Web 服务器将请求 URL 内部的百分比编码 (%encoded) 数据(或者请求主体中的 application/x-www-form-urlencoded 数据)解码到数据库字符集中。现在,将为 UTF-8 序列测试百分比编码 (%encoded) 数据的内容,并最大程度地将其转换为数据库字符集。对任何非 UTF-8 的编码数据进行解码,并且将这些数据视为似乎它们已在数据库字符集中。
客户端 HTTP 应用程序应以独占方式发送百分比编码 (%encoded) 的 UTF-8 数据。请注意,在 UTF-8 中 ASCII 的表示方法不变。例如,将空格编码为 %20。
新客户端回调 API 添加的新客户端回调 API 支持新客户端装载和卸载数据的功能。有关嵌入式 SQL,请参见db_register_a_callback 函数中的 DB_CALLBACK_VALIDATE_FILE_TRANSFER。有关 ODBC,请参见SQLSetConnectAttr 扩展连接属性中的 SA_REGISTER_VALIDATE_FILE_TRANSFER_CALLBACK。
SQL_ATTR_CONNECTION_DEAD 立即检测失效连接 如果连接已经删除(即使从连接删除时起未向服务器发出任何请求),使用 ODBC 的 SQLGetConnectAttr 调用来获取 SQL_ATTR_CONNECTION_DEAD 属性现在会获取值 SQL_CD_TRUE。确定删除的连接是否是在未向服务器发出请求的情况下完成的,并且可在几秒钟内检测到删除的连接。有多种原因可导致删除连接,例如空闲超时。在这一改变之前,如果连接断开或者如果连接删除后 ODBC 驱动程序向服务器发出请求(例如,通过调用 SQLExecDirect),则 SQL_ATTR_CONNECTION_DEAD 仅获得值 SQL_CD_TRUE。请参见获取连接属性。
JDBC 驱动程序现在支持 ResultSet.getBlob().getBinaryStream() 即使 ResultSet.getBlob() 方法在 JDBC 说明中是可选的,iAnywhere JDBC 驱动程序当前也支持此方法。已添加了对 ResultSet.getBlob().getBinaryStream() 方法的支持。请参见JDBC 3.0/4.0 API 支持。
现在,除 jdbc:odbc 外,iAnywhere JDBC 驱动程序还接受将 jdbc:ianywhere 作为 URL 标头 以前,使用 URL 标头 jdbc:odbc 的应用程序非常确定:JDBC 驱动程序管理器将使用 iAnywhere JDBC 驱动程序通过此 URL 建立连接。但是,新版 Java VM 已开始将 Sun JDBC-ODBC bridge 注册为 JDBC 驱动程序,并且由于 Sun JDBC-ODBC bridge 也接受以 jdbc:odbc 开始的 URL,因而应用程序获得 Sun JDBC-ODBC bridge 而非 iAnywhere JDBC 驱动程序的几率非常高。要确保 JDBC 驱动程序管理器使用 iAnywhere JDBC 驱动程序而非 Sun JDBC-ODBC bridge,应用程序应改为使用 URL 标头 jdbc:ianywhere。请参见从 JDBC 客户端应用程序连接。
ODBC 驱动程序管理器现在接受 driver=iAnywhere Solutions 11 - Oracle 现在,UNIX ODBC 驱动程序管理器接受 driver=iAnywhere Solutions 11 - Oracle,并且如果以线程方式执行应用程序,该管理器就会装载 Oracle 的线程 iAnywhere ODBC 驱动程序。如果以非线程方式执行应用程序,该管理器就不会装载驱动程序,因为 Oracle 的非线程 iAnywhere ODBC 驱动程序不受支持。请参见iAnywhere Solutions 12 - Oracle ODBC 驱动。
ODBC 驱动程序管理器现在接受 driver=UltraLite 11 Unix ODBC 驱动程序管理器已接受 driver=SQL Anywhere 10 并装载 SQL Anywhere ODBC 驱动程序(是否以线程方式执行,取决于应用程序)。Unix ODBC 驱动程序管理器现在接受 driver=SQL Anywhere 11 和 driver=UltraLite 11。对于 UltraLite 驱动程序,驱动程序管理器仅 装载 UltraLite ODBC 驱动程序的线程版本,因为只存在线程版本。
TDS 连接增强
如果在连接字符串中不包含涉及启动数据库的内容(即,不存在 DBF=...
)并且如果数据库服务器仅运行一个数据库,则即使 Open Client 登录服务器名与缺省数据库的名称不匹配,SQL Anywhere 数据库服务器现在也允许与缺省数据库进行 TDS 连接。
现在更易于重新部署管理工具启动程序 现在更易于为数据库工具(Sybase Central、DBISQL、DBConsole、ML Monitor)重新部署启动程序可执行文件。不再需要用于 JAR 文件位置的注册表条目和一组目录结构。每个可执行文件都需要一个位于相同目录中的 .ini 文件(名称与可执行文件相同),在该文件中包含有关如何装载该工具的详细信息。请参见管理工具部署。
SQL Anywhere .NET 数据提供程序现在支持分布式事务征用 .NET 2.0 framework 引入了一个新命名空间 System.Transactions,其中包含用于编写事务性应用程序的类。客户端应用程序可以通过一个或多个参与者创建及参与分布式事务。客户端应用程序可以使用 TransactionScope 类隐式地创建事务。该连接对象可以检测周围存在的由 TransactionScope 创建的事务并且自动征用。客户端应用程序还可以创建 CommittableTransaction 并且调用 EnlistTransaction 方法进行征用。
SQL Anywhere .NET 2.0 数据提供程序支持此功能。分布式事务具有很高的性能开销。建议对于非分布式事务使用数据库事务。请参见事务处理。
SQL Anywhere .NET 数据提供程序现在支持命名参数 SQL Anywhere 提供程序现在支持 SACommand 中的命名参数。如果用户指定所有参数名,该提供程序会在执行该命令时映射参数值。使用命名参数时,参数的顺序无需与主机变量的顺序相匹配。
SACommand cmd = new SACommand( "UPDATE MyTable SET name = :name WHERE id = :id", conn ); SAParameter p1 = new SAParameter( "id", SADbType.Integer ); p1.Direction = ParameterDirection.Input; p1.Value = 1; cmd.Parameters.Add( p1 ); SAParameter p2 = new SAParameter( "name", SADbType.Char, 40 ); p2.Direction = ParameterDirection.Input; p2.Value = "asdasd"; cmd.Parameters.Add( p2 ); cmd.ExecuteNonQuery(); |
Web 服务增强 本发行版本中进行了以下 Web 服务增强:
扩展 HTTP:POST 类型的 Web 客户端服务过程以允许使用用户定义的主体 已将 CREATE PROCEDURE 和 CREATE FUNCTION 语句的 TYPE 子句扩展为允许指定 mime 类型。请参见CREATE FUNCTION 语句 [Web 服务]或CREATE PROCEDURE 语句 [Web 服务]。
扩展 Web 服务客户端过程以支持 PUT、DELETE 和 HEAD HTTP 方法 Web 服务客户端过程和函数现在支持 PUT、DELETE 和 HEAD HTTP 方法。已将 CREATE PROCEDURE 和 CREATE FUNCTION 语句的 TYPE 子句扩展为支持这些方法。与 POST 方法类似,PUT 在类型子句中需要一个内容类型扩展并且仅允许一个(非替代)参数。请参见CREATE SERVICE 语句 [HTTP Web 服务]、CREATE SERVICE 语句 [SOAP Web 服务]、CREATE FUNCTION 语句 [Web 服务]和CREATE PROCEDURE 语句 [Web 服务]。
sa_http_php_page 和 sa_http_php_page_interpreted 系统过程 新 Web 服务系统过程 sa_http_php_page 和 sa_http_php_page_interpreted 返回通过 PHP 解释器传递 PHP 脚本的结果。请参见sa_http_php_page 系统过程和sa_http_php_page_interpreted 系统过程。
HTTP_BODY 系统函数 添加了新的 Web 服务函数。HTTP_BODY 函数以二进制形式返回 HTTP 请求的主体。请参见HTTP_BODY 函数 [Web 服务]。
WSDLC 支持生成 Web 服务客户端 SOAP 过程 除了为 C# 和 JAVA 生成 QAnywhere 客户端 SOAP 接口外,WSDLC 现在还支持为 SQL Anywhere 生成 SQL SOAP(Web 服务)客户端过程。WSDLC 读取 WSDL1.1 兼容的 URL 或文件,然后使用相应的参数和子句生成过程(或函数),这些过程(或函数)映射到在 WSDL 内部列出的相应 SOAP 操作。会将生成的 SQL 语句写入某个 SQL 文件中。请参见iAnywhere WSDL 编译器实用程序 (wsdlc)。
使用 FORMAT 子句定义的 HTTP SOAP 服务可通过 EXPLICIT OFF 或 ON 进行进一步限定 创建 HTTP SOAP 服务时,FORMAT 子句的缺省设置为 EXPLICIT ON。这意味着,由 DISH 服务生成的 WSDL 为在结果集中返回的每一列指定显式名称和数据类型。这就允许 SOAP 客户端工具箱自动生成代表该结果集的客户端对象和接口,从而提供对列值的本地访问。在此功能出现前,只能将列值作为抽象 XML 数据元素进行访问。这一行为仍可通过指定 EXPLICIT OFF 来实现。
有关如何定义 EXPLICIT 响应对象或通用 SimpleDataset 的详细信息,请参见CREATE SERVICE 语句 [SOAP Web 服务]和教程:使用 JAX-WS 访问 SOAP/DISH Web 服务。
支持 JSON Web 服务 SQL Anywhere 现在支持以 JSON 格式返回响应的 Web 服务。请参见CREATE SERVICE 语句 [HTTP Web 服务]。
记录 Web 服务客户端 数据库服务器现在支持将记录 Web 服务客户端连接到输出文件。可以指定 -zoc 服务器选项或者将 WebClientLogFile 和 WebClientLogging 属性与 sa_server_option 系统过程一起使用,以控制记录并指定 Web 服务客户端日志文件的位置。也可以通过 -sf 服务器选项禁用此功能。请参见:
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |