Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92391899
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 20:18:39

  来源:qqread    作者:afiewqf

Interactive SQL的安装

然后我打开全屏字符模式查询界面,在另一窗口运行dbisql命令启动Interactive SQL(ISQL),ISQL寻找运行的本地服务器,如果它找到,自动联接,当然首先询问你的用户名和口令当然。从ISQL,我执行一个简单的查询:






select * from employee

查询结果见图2。

SQL键盘命令表

F1:Help / 帮助
F5:Scroll data display left / 向左滚动数据显示
F6:Scroll data display right / 向右滚动数据显示
F9:Execute the SQL query you have entered / 执行你的输入的SQL查询
F10 :Activate the menus / 激活菜单
Ctrl+PgUp :Move to top of data display / 移到数据显示的顶部
Ctrl+PgDn :Move to bottom of data display / 移到数据显示的底部

图2  Select查询的结果

注意你必须按F9键来执行查询。这只是几个老式键盘和图形用户界面的选择之一,可惜这表明Isql有些陈旧。鼠标器在运行GNOME终端的bash控制台上不能工作。但它有时能很精确地确定你在点按的位置。

ISQL包含一个界面执行SQL查询,并且它也能用于其他很多数据库管理任务。但是Sybase也在新的Sybase Central Java Edition(Java版Sybase Central)中提供了一个更人友好的数据库管理接口。为了运行它,你必须有一个能工作的JDK,不幸的是,JDK还不是RedHat或其他Linux发行版本的核心部件。我使用Blackdown移植计划(参见附录)的jdk117_v3。注意Sybase Central使用JDK 1.1版,这样就不需要最新的Blackdown或其他JDK 1.2版。

$SYBASE/sybcentral32/java/scjview

你首先要注意的是Sybase Central显示有些不清晰的字体(见图 3 ),这很可能是JVM而不是应用的问题,但是如果应用允许字体的更改就更好了。 Sybase宣称正在解决此问题。下面的屏幕快照是连接上面已经启动的数据库服务器例子的情形。你必须用主机名或IP地址指定服务器。端口是标准的Sybase端口(2638 ),并且数据库名字是asademo。这确实只是连接一个JDBC查询的前端,该JAVA查询设置数据库连接的URL并初始化强大的类集合以树状结构显示各种数据库组件(我们以后将看见本文中用到的一些底层JDBC)。应用使用Swing Java用户接口类(Sybase自带,因此没有必要单独下载他们),并且你能在运行时刻改变外观。不幸地,这些显示选项没有改进字体的选择。

图3 用Sybase Central Java Edition连接样本数据库

在CD-ROM上软件包有优秀文档,它以HTML形式被组织很好并且交叉参考。Sybase确实尽力使用户快速而容易进入软件包,并且它在文档方面显示出了这种努力。

SQLC编程-将SQL嵌入C语言

大多数数据库管理系统引擎现在都支持C和C++代码中嵌入SQL查询。Sybase使它更简单。不幸的是,提供的例子不必兜圈子,也不必为各种的操作系统包含一个条件章节的大全。我开始便写设计运行在Linux上一个更直接例子,你将在它下面找到:

#include 
#include 
/* Set up the SQL Communication Area*/
EXEC SQL INCLUDE SQLCA;
#include "sqldef.h"

/* Set up a struct set up to collect query results */
typedef struct employee_t {
    unsigned long emp_id;
    char name[ 41 ];
    char sex[ 2 ];
    char birthdate[ 15 ];
} employee_t;

/* Print out the various fields of the employee struct */
static void print_employee(employee_t emp)
{
  printf("(%li, %s, %s, %s)\n", emp.emp_id, emp.name, emp.sex, emp.birthdate);
}

/* Declare the Cursor. This must precede all cursor operations in
   the source code
*/
EXEC SQL DECLARE C1 CURSOR FOR
  SELECT emp_id, emp_fname || ' ' || emp_lname, sex, birth_date
  FROM "dba".employee;

/* Fetch a single row and advance the cursor */
static int fetch_row( 
    EXEC SQL BEGIN DECLARE SECTION;
    unsigned long *emp_id,
    char *name,
    char *sex,
    char *birthdate 
    EXEC SQL END DECLARE SECTION;
    )
{
    EXEC SQL FETCH RELATIVE 1 C1
             INTO :emp_id, :name, :sex, :birthdate;

    /* SQLCODE is 0 while there are no errors and rows remaining */
    return !SQLCODE;
}

/* A basic SQL error handler */
EXEC SQL WHENEVER SQLERROR {
  char buffer[ 200 ];
  printf("SQL error: %s\n", sqlerror_message(&sqlca, buffer, sizeof(buffer)));
  return(0);
};

/* The heart of the matter */
int main( int argc, char *argv[] )
{
  employee_t current_employee;

  /* Initialize the Sybase client run-time */
  if(!db_init(&sqlca))
    {
      printf("Unable to initialize database interface");
      return(-1);
    }

  /* Locate the running server engine */
  if(!db_find_engine(&sqlca, NULL))
    {
      printf("Database Engine not running");
      db_fini( &sqlca );
      return(-1);
  }

  /* Connect to the engine using user/password "DBA"/"SQL" */
  EXEC SQL CONNECT "DBA" IDENTIFIED BY "SQL";

  /* Open (initialize) the cursor */
  EXEC SQL OPEN C1;

  /* Iterate over all the rows, retrieve the data and print them out */
  while (fetch_row(¤t_employee.emp_id,
     current_employee.name,
     current_employee.sex,
     current_employee.birthdate
     ))
    {
      print_employee(current_employee);
    }

  /* We're done with the cursor */
  EXEC SQL CLOSE C1;
  return 0;
}
阅读(433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~