用ANSISQL 编写可以兼容不同数据库的应用程序

2009-04-10 08:33:51 作者:admin 来源: 浏览次数:0 网友评论 0

 如果我们要编写跨平台的,在不同数据库上都可以使用的应用程序,那么我们应该尽量采用ANSI SQL ,而不是用一些非标准的SQL命令(比如Oracle、微软和MySQL等数据库系统专用的命令)。

    如果我们要编写跨平台的,在不同数据上都可以使用的应用程序,那么我们应该尽量采用ANSI SQL ,而不是用一些非标准的SQL命令(比如Oracle微软MySQL数据库系统专用的命令)。这里对如果编写不同数据库兼容的应用程序有一下几点建议:

1、别使用存储过程
    在某些编程环境下,出于效率和安全等方面的原因,存储过程成为程序员开发数据库应用程序的唯一方法。Visual Basic、C和Java程序员都并不需要了解SQL。然而,在其他某些编程环境下,存储过程又是完全禁用的。MySQL通常和Apache Web服务器组合使用,这是因为这两种软件不仅免费、可靠而且功能强大,但是,恰恰是MySQL不支持存储过程。 

2、别使用连接(Join)
    连接是Oracle和SQL Server 这两种DBMS上令人头痛的一个问题,因为这两种系统在连接的概念上有根本的不同。基本上,各个DBMS的连接工作原理不总是一样的,而且你最终可能会得到意外的结果集合。在我们谈论各个系统有关连接的概念差别以及如何解决这些问题之前,你应该理解基本的连接子句:
连接:Join(连接)是从多个数据源获取数据的SQL数据表创建命令。
等连接:Equi-Join从两个独立的数据源获取数据并把它们组合成一个大表。
内/外连接:内连接(Inner Join)把两个表的内部列连接起来。外连接把两个表的外部列连接起来。
左/右连接:左连接(Left Join)连接两个表左边的列。右连接则连接两个表右边的列。
复合/复杂连接:其他各种连接—左/内、左/外、右/内和右/外等。
如果你想要自己的应用程序能在各种数据库服务器上都能工作那么就别使用连接。

3、使用ANSI SQL的命令:CREATE, DROP, ADD, UPDATE, DELETE, INSERT, SELECT
在数据定义时使用数据定义语言(DDL)下的CREATE 和DROP。
在操作数据库时使用数据操作语言(DML)下的ADD、UPDATE、DELETE和INSERT 。
在要查询数据库获取数据时使用获取数据的SELECT。
同时要注意:如果你在这些命令中使用了区分大小写的表格或字段名,或者这些名字包含了空格或其它特殊字符,那么你最好用方括号把名字围起来。这样做有助于防止非标准字符引发DBMS的不正常反应。

4、使用兼容的数据类型
只有很少部分的数据类型得到所有数据库服务器的支持。每一种DBMS都有它自己的数据类型以及为什么要这样使用它们的原因。某些专有数据类型(比如Microsoft Access的AUTONUMBER)用起来确实相当方便。
以下是ANSI数据类型:
BIT, CHARACTER, DATE, DECIMAL, DOUBLE
PRECISION, FLOAT, INTEGER, INTERVAL, NUMERIC,
REAL, SMALLINT, TIMESTAMP, TIME, VARBIT, VARCHAR, CHAR
以下是Oracle/Access/SQL不支持的“标准”数据类型:
INTERVAL, TIME, VARBIT
只有Oracle才支持DATE,但是以下的“标准”数据类型不被Oracle支持:
BIT, DECIMAL, NUMERIC, TIMESTAMP
以下的“标准”数据类型不被Access支持:
BIT, CHARACTER, DATE, NUMERIC, SMALLINT, TIMESTAMP
这样,只有以下的数据类型可以保证在各类数据库上都能使用:
DOUBLE PRECISION, FLOAT, INTEGER, NUMERIC, REAL, SMALLINT, VARCHAR, CHAR

5、主/外键的使用要注意的事项
假设某个表内有两个字段,创建这个表的语法如下:
CREATE TABLE [MyTable] ([FieldA] VARCHAR, [FieldB] VARCHAR);
为了添加主键以便表内的每一条记录都唯一标识你可以采用PRIMARY KEY 表达式:
CREATE TABLE [MyTableA] ([RecordID] VARCHAR  PRIMARY KEY, [FieldA] VARCHAR, [FieldB] VARCHAR);
在创建另一个表,其中一个字段索引第1个表,你可以把该字段定义为同第1个表的字段具有关系的外键:
CREATE TABLE [MyTableB] ([RecordID]
VARCHAR PRIMARY KEY, [FieldA] VARCHAR,
[FieldB] VARCHAR, [FieldC] VARCHAR REFERENCES
[MyTableA]([FieldA]))
在以上例子中,所有的字段都是VARCHAR类型;但是你得记住,某一数据类型字段只能索引同一数据类型的字段。

6、使用ODBC 和 JDBC
如果你在编写的应用程序要用到SQL数据库连接,那么你可以用ODBC完成该功能。如果它是一个Java应用程序则可以用JDBC(简而言之就是ODBC的Java接口)。
因为你希望自己的应用程序最好不要引起管理员的注意,所以你应该为你用户的DBMS包括所有必要的ODBC驱动程序。这样,如果用户从一个平台转移到另一个平台,它们所需要的驱动程序却已经事先拥有了。
你的应用程序应该通过编程的方式决定当前用到的ODBC驱动程序对应何种DBMS。这样你才能用上那些数据库服务器上强大的、同特定平台相关的命令。

 

[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]

  • 验证码:

最新图片文章

最新文章