|
|
Adaptive Server Anywhere 7.0网上培训教材
在数据库中使用Java
目标
§说明在数据库中如何使用Java
§说明Java怎样被储存在数据库中
§配置数据库可使用Java
§在数据库安装Java 类
§操纵 (select, insert, update, delete) 表中的Java 数据类型
§在SQL语句中使用Java 函数
§调用Java存储过程
§说明JDBC在 数据库访问中的作用
内容
§如何在数据库中使用Java?
§在数据库中储存Java
§把数据库设置为能使用Java
§SQL对Java的支持
§Java术语概述
§使用Java方法
§在存储过程中使用JDBC
§使用Java数据类型
§更新和删去表数据行
§使用Computed列
如何在数据库中使用Java?
§你可以三种不同的方式使用Java类:
作为函数
作为存储过程
作为复杂的数据类型
Java 环境
§Sybase Java 虚机(VM)
提供Java类的运行时环境
Sybase Java VM 是 JDK 1.1.8的一个子集
不是 Java的开发环境
应使用 PowerJ 或 Sun JDK 进行开发
§内置基本 Java 类
设置数据库能使用Java
§让数据库可使用Java
§安装用户类
§为Java配置内存
能使用 Java的数据库
§利用以下方式建立的数据库在缺省情况下都能 使用 Java
§ CREATE DATABASE 语句
dbinit 命令行实用程序
Sybase Central
让数据库能使用 Java
安装 Java 类
§你可把用户类安装为
单个类,或者JARs
§安装 Java 类,可使用
Sybase Central,或者 交互式 SQL
安装 Java 类
§使用交互式SQL安装类或JAR 安装
JAVA NEW FROM FILE 'path\\类Name.类';
§ 安装
JAVA NEW JAR 'jarname' FROMFILE 'path\\JarName.jar';
建立Java 类
§Adaptive Server Anywhere
不能完成Java 类的建立
在数据库安装了Java类之后可对其进行排错
§ 类的建立 应当使用标准的Java工具,比如 PowerJ 或 Sun Java SDK来编写和编译
为Java配置内存
§ Java VM 需要附加的 cache
使用 -c 命令行选项指定额外的cache
§Java VM 至少需要附加8M cache.
§ dbeng7 -c 8M labTest.db
§可考虑设置一个包含该命令行的 profile或快捷键
Java 术语概述
§是面向对象的 Java是由对象组成的
§方法 包含在一个对象中的过程
§类和实例 Java 对象是利用称之为类的原型对象来建立的
利用一个类来实例化对象
新对象是该类的一个实例
§类和实例方法
为调用一个实例方法你建立该类的一个新实例然后依据它调用该方法
你也可以直接调用类方法
§Constructor(构造函数) 当一个对象被实例化时所调用的方法叫做 Constructor
一个对象可能有多个constr
作为函数来使用 Java 方法:
SQL 函数 SELECT sqrt(12)
等价的 Java 函数 SELECT java.lang.Math.sqrt(12)
从Java调用实例方法
1、Java (使用 StringTokenizer)
public class Word {
public static int count(String arg) {
return new
java.util.StringTokenizer(arg).countTokens();
}
}
SELECT 语句
2、SELECT description, Word.count(description) from product
在存储过程中使用 JDBC
§JDBC提供用于访问关系数据的API
§客户-端 JDBC 允许客户通过特定的数据库驱动器 (比如, jConnect)去访问数据
§服务器-端 JDBC 允许数据库中的Java 类去访问关系数据
在存储过程中使用 JDBC
§Java 存储过程的调用方法与 SQL 存储过程一样
§Java 存储过程要访问关系数据因而要求JDBC
§存储过程处于服务器-端 因而要使用 服务器-端JDBC
§不要求jConnect
在存储过程中使用 Java:
调用 JDBCTest.test( )
使用 Java 数据类型
§任何已安装的Java 类都可作为数据类型使用
§数据类型名称必须是完全限定的
§Java数据类型对大小写是敏感的
在数据库中使用 Java
§ CREATE 表 jdba.customer
(
id integer NOT NULL,
company_name CHAR(35) NOT NULL,
JName Adaptive Server Anywheredemo.Name NOT NULL, JContactInfo Adaptive Server Anywheredemo.ContactInfo NOT NULL, PRIMARY KEY (id))
限定Java 列
§表查询 (假定列Jprod 使用 Java 数据类型)
§select Jprod from product
选择整个 列 基于该类的String() 法返回结果集
限定Java Fields(字段)
§ 使用方法来选取列Jprod 中的一个字段
SELECT Jprod.getDescription( ) FROM product
§利用指定字段名来选取列Jprod 中的一个字段
SELECT Jprod.description FROM product
插入 Java 列
§利用缺省constructor 插入Java 对象
§ INSERT INTO product (ID, Jprod) VALUES (702, NEW Adaptive Server Anywheredemo.Product( ))
插入Java 列
§利用把所有的参数都传送给constructor来插入Java 对象
§ insert into product_item(id,JProd) •values (704, NEW Adaptive Server Anywheredemo.Product('Yellow','tee-shirt with picture of GG bridge', 'SF tee shirt',50,'Big',19.99))
更新Java 对象
§更新整个对象 使用constructor 使用SQL变量
§更新对象的某些字段
在UPDATE中 使用EVALUATE 函数
§EVALUATE 函数要求设定字段值的方法
删除Java 对象
§与删除一般数据行是一样的
§WHERE子句中可以包含Java 对象或Java字段和方法
访问Java 列
§如果打算使用 java 列作为: primary keys, indexes, unique 列, min() or max() SQL 函数, ORDER BY, GROUP BY, OR DISTINCT
§那么该java 类 必须实现一个compareTo()方法 在定义实现时要遵从:
必须调用compareTo()
不能被修改
SELECT name, Jprod.unit_price
FROM Product
ORDER BY Jprod.unit_price
SELECT name, Jprod.unit_price
FROM Product ORDER BY JProd
(The Product class has a compareTo() method that compares objects based on the unit_price field)
使用Computed(利用其他列计算出来的)列
§具有Java 类的 computed 列主要用于:
分解Java 列 把Java 列增加到表中
§在每次读取Computed 列时它不会被更新
仅当数据行被修改时它才会更新
使用 Computed 列
§建立包含computed 列的表
CREATE TABLE Product (
id INTEGER NOT NULL,
JProd Adaptive Server Anywheredemo.Product NOT NULL,
name CHAR(15) COMPUTE (Jprod.name),
PRIMARY KEY ("id"
§表中增加computed 列
ALTER TABLE Product ADD inventory_Value INTEGER COMPUTE (Jprod.quantity * Jprod.unit_price)
小结
§Adaptive Server Anywhere 允许在数据库中把Java用做:
函数
存储过程
复杂的数据类型和 computed 列
§数据库必须设置为Java-enabled.
§Java虚机需要8MB内存.
§Java语法可被嵌入在SQL中.
§ 编写存储过程要求服务器-端 JDBC
经过两个晚上的时间,终于将这部分的资料浏览了并编辑了一遍,在和ase的比较过程中,可以发现这两种数据库产品差别还是很大的,无论是在使用对象及本身的语法结构上都有很大的差别!
希望诸位有实际使用asa产品经验的朋友能踊跃发表自己的见解! |
|