Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 12 - 更改和升级 » 11.0.0 版中的新功能 » SQL Anywhere » SQL Anywhere 的新功能

 

编程接口

以下列出了在 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 服务器选项禁用此功能。请参见: