远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

使用 JDBC 访问数据

本节介绍如何使用 JDBC 来执行 SQL 应用程序的典型操作。这些示例是 从 JDBCExamples 类中提取的, 78 页的 “ JDBCExamples 类”中介绍 了该类。

JDBCExamples 说明了用户接口的基础知识,并介绍了 SQL 操作的内部编 码方法。


JDBCExamples 类的概述

要在计算机上执行这些示例,请在服务器上安装 Address 类,并将其包 括在 jConnect 客户端的 Java CLASSPATH 中。

可以从 jConnect 客户端或 Adaptive Server 调用 JDBCExamples 的方法。


image

注释 必须从 jConnect 客户端创建或删除存储过程。 Adaptive Server 内 部驱动程序不支持 create procedure drop procedure 语句。

image


JDBCExamples 静态方法执行以下 SQL 操作:

创建和删除示例表 xmp

create table xmp (id int, name varchar(50), home Address)

创建和删除示例存储过程 inoutproc

create procedure inoutproc @id int, @newname varchar(50),

@newhome Address, @oldname varchar(50) output, @oldhome Address output as


select @oldname = name, @oldhome = home from xmp where id=@id

update xmp set name=@newname, home = @newhome where id=@id

xmp 表中插入一行。

xmp 表中选择一行。

更新 xmp 表中的一行。

调用存储过程 inoutproc 它具有数据类型为 java.lang.String Address

的输入参数和输出参数。

JDBCExamples 仅在 xmp 表和 inoutproc 过程中运行。


main( ) serverMain( ) 方法

JDBCExamples 有两个主要方法:

main( ) — 从 jConnect 客户端的命令行中调用。

serverMain( ) — 执行与 main( ) 相同的操作,但在 Adaptive Server 中 调用。

JDBCExamples 类的所有操作都是通过调用这些方法之一来调用,并使用 一个参数来指示要执行的操作。


使用 main( )


java JDBCExamples


可以从如下所示的 jConnect 命令行中调用 main( ) 方法:

server-name:port-number?user=user-name&password=passwordaction

可以使用 dsedit 工具,从 interfaces 文件中确定 server-name port-numberuser-name password 是您的用户名和口令。如果忽略

&password=password ,则缺省为空口令。这里有两个示例:

"antibes:4000?user=smith&password=1x2x3" "antibes:4000?user=sa"

确保参数在引号中。

action 参数可以是 create tablecreate procedureinsertselectupdate

call。它是区分大小写的。

可以从 jConnect 命令行中调用 JDBCExamples 以创建 xmp 表和 inoutproc

存储过程,如下所示:

java JDBCExamples “antibes:4000?user=sa” CreateTable java JDBCExamples “antibes:4000?user=sa” CreateProc

可以为 insertselectupdate call 操作调用 JDBCExamples,如下所示:

java JDBCExamples “antibes:4000?user=sa” insert java JDBCExamples “antibes:4000?user=sa” update java JDBCExamples “antibes:4000?user=sa” call java JDBCExamples “antibes:4000?user=sa” select

这些调用将显示 “操作已执行”消息。 要删除 xmp 表和 inoutproc 存储过程,请输入:

java JDBCExamples “antibes:4000?user=sa” droptable java JDBCExamples “antibes:4000?user=sa” dropproc


使用 serverMain( )


image

注释 由于服务器端 JDBC 驱动程序不支持 create procedure drop procedure,因此,在执行这些示例之前,请通过客户端的 main( ) 方 法调用来创建 xmp 表和示例存储过程 inoutproc 。请参阅 70 页的 “ JDBCExamples 类的概述

image


在创建 xmp inoutproc 后,可以调用 serverMain( ) 方法,如下所示:

select JDBCExamples.serverMain('insert') go

select JDBCExamples.serverMain('select') go

select JDBCExamples.serverMain('update') go

select JDBCExamples.serverMain('call') go


image

注释 serverMain( ) 的服务器端调用不要求 server-name:port-number 参数;

Adaptive Server 只是连接到自身。

image


获取一个 JDBC 连接:Connecter( ) 方法

main( ) serverMain( ) 都调用 connecter( ) 方法,此方法返回一个 JDBC

Connection 对象。 Connection 对象是所有后续 SQL 操作的基础。

main( ) serverMain( ) 都通过为服务器端或客户端环境指定 JDBC 驱动程 序的参数来调用 connecter( )。之后,返回的 Connection 对象作为参数传 递给 JDBCExamples 类的其它方法。通过隔离 connecter( ) 方法中的连接 操作, JDBCExamples 的其它方法将独立于其服务器端或客户端环境。


将操作传递给其它方法: doAction( ) 方法

doAction( ) 方法基于 action 参数传递对其它方法的调用。

doAction( ) 具有 Connection 参数,它只将此参数传递给目标方法。它也有 一个 locale 参数,用以指示调用是在服务器端还是在客户端。如果 create procedure drop procedure 在服务器端环境调用,Connection 将引发一个 异常。


执行必要的 SQL 操作:doSQL( ) 方法

doSQL( ) 方法执行不要求输入参数或输出参数的 SQL 操作,例如 create tablecreate proceduredrop table drop procedure

doSQL( ) 有两个参数:Connection 对象和它要执行的 SQL 语句。doSQL( )

创建一个 JDBC Statement 对象,并且用它来执行指定的 SQL 语句。


执行 update 语句:updater( ) 方法

updater( ) 方法执行一个 Transact-SQL update 语句。 update 操作为:

String sql = "update xmp set name = ?, home = ? where id = ?";

它利用给定的 id 值更新所有行的 name home 列。

name home 列的 update 值以及 id 值都是由参数标记 (?) 指定的。在准 备语句后,执行之前, updater( ) 将为这些参数标记提供值。这些值是由 带有以下参数的 JDBC setString( )setObject( ) setInt( ) 方法指定的:

将被替代的顺序参数标记

将被替代的值 例如:

pstmt.setString(1, name); pstmt.setObject(2, home); pstmt.setInt(3, id);

完成这些替代后, updater( ) 执行 update 语句。

为了简化 updater( ),示例中被替换的值是固定的。正常情况下,应用程 序将计算替换值或者将它们作为参数来获得。


执行 select 语句:selecter( ) 方法

selecter( ) 方法执行一个 Transact-SQL select 语句:

String sql = "select name, home from xmp where id=?";

where 子句使用参数标记 (?) 标记要选择的行。在准备 SQL 语句后,

selecter( ) 使用 JDBC setInt( ) 方法为参数标记提供值:

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setInt(1, id);


然后, selecter( ) 执行 select 语句:

ResultSet rs = pstmt.executeQuery();


image

注释 对于不返回结果的 SQL 语句,请使用 doSQL( ) updater( )。它们 使用 executeUpdate( ) 方法执行 SQL 语句。


对于返回结果的 SQL 语句,使用 executeQuery ( ) 方法,该方法返回一个

JDBC ResultSet 对象。

image


ResultSet 对象与 SQL 游标类似。开始,它定位在结果的第一行前。每一 次调用 next ( ) 方法都将 ResultSet 对象前进到下一行,直到最后一行。

selecter ( ) 要求 ResultSet 对象仅包含一行。selecter ( ) 调用下一个方法,并 检查 ResultSet 没有行或有多于一行的情况。

if (rs.next()) {

name = rs.getString(1);

home = (Address)rs.getObject(2); if (rs.next()) {

throw new Exception("Error: Select returned multiple rows");

} else { // No action

}

} else { throw new Exception("Error: Select returned no rows");

}

在上面的代码中,getString( ) getObject( ) 方法调用检索结果集的第一行 中的两列。“(Address)rs.getObject(2)”表达式将第二列作为 Java 对象进行 检索,然后将该对象强制指定为 Address 类。如果返回的对象不是 Address,那么将引发一个异常。

selecter( ) 检索单个行,并检查没有行或有多个行的情况。处理多行 ResultSet 的应用程序简单地在 next( ) 方法调用中循环,并将每一行作为 单行处理。

以批处理模式执行 如果要执行一批 SQL 语句,请确保使用 execute( ) 方法。如果对批处理 模式使用 executeQuery( )

如果批处理操作不返回结果集 (不包含 select 语句),批处理执行不 会出错。

如果批处理操作返回一个结果集,则返回结果语句之后的所有语句 都被忽略。如果调用 getXXX( ) 来获得一个输出参数,则将执行剩余 语句并关闭当前结果集。

如果批处理操作返回多个结果集,将引发一个异常并中止该操作。 使用 execute( ) 可确保在所有情况下完成批处理的执行。


调用 SQL 存储过程:caller( ) 方法

caller( ) 方法调用 inoutproc 存储过程:

create proc inoutproc @id int, @newname varchar(50), @newhome Address,

@oldname varchar(50) output, @oldhome Address output as


select @oldname = name, @oldhome = home from xmp where id=@id update xmp set name=@newname, home = @newhome where id=@id

此过程有三个输入参数 (@id@newname @newhome)和两个输出 参数 (@oldname @oldhome)。caller( ) 使用 @id ID 值将 xmp 表行 的 name home 列设置为 @newname @newhome 值,并在输出参数

@oldname @oldhome 中返回这些列以前的值。

inoutproc 过程说明如何在一个 JDBC 调用中提供输入和输出参数。

caller( ) 执行以下调用语句来准备调用语句:

CallableStatement cs = con.prepareCall("{call inoutproc (?, ?, ?, ?, ?)}");

调用的所有参数都被指定为参数标记 (?)

caller( ) 使用 JDBC setInt( )setString( ) setObject( ) 方法提供输入参数的 值, doSQL( )updatAction( ) selecter( ) 方法中使用了这些方法:

cs.setInt(1, id); cs.setString(2, newName); cs.setObject(3, newHome);

这些 set 方法不适合输出参数。在执行调用语句之前,caller( ) 使用 JDBC

registerOutParameter( ) 方法指定输出参数的预期数据类型:

cs.registerOutParameter(4, java.sql.Types.VARCHAR); cs.registerOutParameter(5, java.sql.Types.JAVA_OBJECT);

然后 caller( ) 执行调用语句并且使用与 selecter( ) 方法所用的相同 getString( )

getObject( ) 方法来获取输出值:

int res = cs.executeUpdate(); String oldName = cs.getString(4);

Address oldHome = (Address)cs.getObject(5);




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------