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