`
winzenghua
  • 浏览: 1370930 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

通用数据库软件完成的最后总结

阅读更多

做了约有一个月的软件基本完成,本以为会做成一个和J2EE有关的组件,被make的毕业设计导师(此处隐去此人姓名)带错道路,以至开发成为一个完全的软件。

在最后的几天里,基本时间浪费在调和数据库连接上,本软件用到了5个数据库
Sql Server,MySql,Oracle,DB2 UDB,Sybase

在我机器上的情况:它们各自的库都保存到jbuilder/lib/ext文件夹下,部分保存到软件驱动里面,以备以后使用。

一、下面分别说一下遇到的相关问题:


1.Sql Server
一定要装上sp3才能顺利完成,有时机器会出现只有自己机器能访问,别的机器都连不上的情况,重启一下会有很好效果。
存储过程查询xx库所有的所有的表名
exec sp_tables
获得所有库
exec sp_databases


2.MySql
用winmysqladmin.exe输入的用户名登陆有时出现问题是odbc@localhost……,不知道怎么回事,在
use mysql
insert into user(host,user,password) values("","","")
新建一个用户就可以用此用户登陆了
新建数据库都可以在mysql>提示符下进行操作
3.Oracle
这可是个大家伙,首先要注意的是如果机器装过一次oracle再次装时候会及其难装,所以卸载时候有说法,要仔细的卸载,或者干脆重新装,

所以装在虚拟机上是个不错的选择。

第二次装时候,即使装上了也会出现这样或那样问题,比如说明明有这个用户,监听器也开着哪可是就是连不上,不是别的原因,重新装,别犹豫。

例如,Oracle提供了2种JDBC drivers :
- JDBC Thin for Java applets and applications
- JDBC OCI for Java applications
按照所用的JDBC的不同,URL也有所不同。
// Oracle Jdbc Thin driver
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection dbCon = DriverManager.getConnection("jdbc:oracle:oci7:@mydatabase", "scott", "tiger");

// Oracle Jdbc OCI driver
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection dbCon = DriverManager.getConnection("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger");

oracle中新建用户
建议你create user luck identified by 123;(不要有"")
grant connect,resource to luck;

默认用户有system密码manager

对应每个用户有不同的用户表

4.DB 2
我装得是8.2,出现情况是当数据库在使用中的时候,你删除它严重问题会出现你连服务都启动不了。
默认用户名和密码是db2admin db2admin
用db2admin在别的软件登陆能查询到的是模式是db2admin的表,所以你的表一定要建成db2admin模式的

1) com要大写COM
COM.ibm.db2.jdbc.net.DB2Driver 或
COM.ibm.db2.jdbc.app.DB2Driver
2) url与类不匹配
jdbc:db2://localhost:5000/sample 要使用net型的.

3) 保证db2java.zip在类路径中
此文件在sqllib\java\下
关于版本问题,只要作到你程序使用的jdbc驱动版本和远程数据库使用的一样

远程连接DB2数据库时候用的驱动:应该使用COM.ibm.db2.jdbc.net.DB2Driver
5.Sybase
这个一个和Sql Server很像的程序,首先出现的问题是打开central时候会出现can't open scsslgen这个东东,你到安装的根目录(这个根目

录不是平常意义的根目录,比如你装在c:\sybase则根目录是c:\,)下面的sybtool里面搜索scsslgen并改名为 scsslgch还有一个……en.cnt

文件也要重命名为……cn.cnt,这是为解决中文问题,我用的sybase版本是11.5,对了他带我一直想要的powerdesigner.
还有他不支持元数据查询,比如conn.getMetaData他是不支持的。
默认用户名是sa密码为空


所有数据库一定要记得用户名和密码
二、在Jbuilder里面只要在project properties 中把库加入进来就ok了

三、在这个软件中大部分都是用到元数据获得用户表名,此处有几个从系统表选出用户表的查询语句:
Oracle

SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME

MySQL

SHOW TABLES

MS SQL Server

select name from sysobjects where type = N'U' order by name


DB2 UDB

SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T' AND CREATOR != 'SYSIBM' ORDER BY NAME

四、关于多数据库支持的两种方式
应用软件厂商面临不同的客户需求时,需要支持不同的数据库产品,可是不同的数据库产品之间的SQL相差是巨大。

例如以下的SQL,在不同的数据库中的写法是不一样的。

SELECT TOP 1 * FROM T1 LEFT JOIN T2 ON T1.Id = T2.ParentId Order By T1.Id
Oracle:

SELECT * FROM (
SELECT * FROM T1, T2 WHERE T1.Id = T2.ParentId (+) ORDER BY T1.Id ASC
)
WHERE ROWNUM <= 1

Sybase:

SET ROWCOUNT 1
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.Id = T2.ParentId ORDER BY T1.Id ASC
SET ROWCOUNT 0

MySQL:

SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.Id = T2.ParentId
ORDER BY T1.Id ASC LIMIT 0, 1

MS SQL Server:

SELECT TOP 1 * FROM T1 LEFT OUTER JOIN T2 ON T1.Id = T2.ParentId ORDER BY T1.Id ASC

DB2 UDB:

SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.Id = T2.ParentId
ORDER BY T1.Id ASC FETCH FIRST 1 ROW ONLY


五、支持多数据库是一种困难的事情。支持多数库有两种两种方式。
第一种方式,编写一个数据库抽象层,针对不同的数据库作不同的实现。
第二种方式,使用一种Common SQL,通过一个翻译引擎,将Common SQL翻译为Dialect SQL。
目前很多开放源代码项目,都支持多数据库,通常是使用第一种方式。第一种方式,有一个问题,就是要求程序员对不同数据库都熟悉,这个

要对,对大多数程序员而言,太高了。包括著名开源项目的Hibernate,也只是利用到数据库的相当少的一部分功能,没有针对不同数据库的优

化选项。不同数据库对Query Hints和Locking Hints的支持都不相同,而Hints又是数据库访问优化的重要办法。这种方式在实现的过程中,会

占用相当大一部分的开放实现,而且对程序的可维护性造成影响。

第二种方式,需要定义一套Common SQL,接近SQL-92标准,跟某一种Dialect SQL相似,例如可以跟MS SQL Server的Transact SQL相似。还需

要一个翻译引擎,把Common SQL翻译到不同的Dialect SQL,例如DB2的SQL、Oracle的P/L SQL,Microsoft的Transact SQL。这样,大多数程序

员只需要了解一种Dialect SQL,如果以Microsoft的Transact SQL为基准定义Common SQL,大多数的程序员都了解SQL Server的Transact SQL

,几乎不需要或者只需要很低培训成本,就可以支持多数据库了。

目前国外有一间公司提供有一个SQL翻译的产品,http://www.swissql.com/,但是该公司的翻译引擎做得还很不成熟,BUG很多。国内的也有相

应的软件厂商提供有相应的产品,其成熟度要比SwisSQL要高,翻译速度也相当快。


六、获得元数据
databaseMetaData的getTables
获得表中的信息
你可对DataBaseMetaData对象使用getTables()方法以得到数据库中表的信息。这
个方法有以下四个字符串参数:

results = dma.getTables(catalog, schema, tablemask, types[]);

参数的意义为:

catalog
用来寻找表名的目录名称。对于JDBC-ODBC数据库和许多其它的数据库,它可被设置为null。这些数据库的目录条目实际上为它们在文件系统

中的绝对路径。

schema
要包括的数据库schema。许多数据库并不支持schema,而对于其它的数据库,它为数据库所有者的用户名称。

tablemask
描述你要获取的表的名称的一个掩码。若你想获取所有的表名,将它设为通配符%。注意SQL用%作为通配符,而不是PC上的*。

types[]
描述你要获取的表的种类的一个字符串数组。数据库中通常包括一些用于内部管理的表,而这些表对用户来说是毫无用处的。若被设为null,

你将得到所有的表。若使该数组只包括一个元素,且将该元素设为字符串“TABLE”,你将得到用户所感兴趣的那些表。


获得数据库中表的名称相对于先得到DatabaseMetaData对象,然后再从中取得表的名称。


分享到:
评论

相关推荐

    powerbuilder11.5连接Oracle数据库的通用方法。

    ### PowerBuilder 11.5 连接 Oracle 数据库与 SQL Server 2000 的通用方法 在软件开发过程中,数据库的连接是至关重要的一步。PowerBuilder 是一款功能强大的快速应用开发工具,广泛应用于企业级应用开发。本文将...

    oracle软件安装和数据库的创建_oracle_数据库oracle_

    1. 创建数据库模板:Oracle提供了一些预定义的数据库模板,如通用数据库、OLTP数据库等,可以根据需求选择。 2. 使用DBCA(Database Configuration Assistant):这是Oracle提供的图形化工具,用于简化数据库的创建...

    数据库的安装

    下载安装介质,运行SQL Server安装中心,选择安装类型(如全新安装或添加功能),配置实例和服务器核心选项,设置数据库引擎服务帐户,定义身份验证模式,选择要安装的功能,配置网络协议,最后进行安装总结和确认。...

    基于组态软件嵌入式数据库的设计 .pdf

    设计是通过调用Visual Basic的可执行文件来完成的,实现了组态软件与数据库的深度融合。 一、组态软件和嵌入式数据库的基础概念 组态软件,也称为配置软件,是一种通过图形化界面,允许用户自定义工业控制系统运行...

    SQL数据库出现质疑处理方法

    这段代码示例展示了如何对指定的数据库执行修复操作,包括设置单用户模式、检查表的完整性并进行修复,最后恢复为多用户模式。 #### 三、总结 本文详细介绍了当SQL数据库出现质疑时的处理方法,包括配置允许修复、...

    ORACLE创建数据库

    首先,在安装Oracle软件之前,需要确保安装用户属于管理组,具备足够的权限来安装软件和创建数据库。在Windows操作系统中,通过开始菜单找到Oracle安装目录下的Database Configuration Assistant(DBCA)工具。而在...

    通用软件工程项目模板

    总结来说,“通用软件工程项目模板”是软件开发过程中的导航图,涵盖了从项目启动到最终交付的每一个环节。通过合理运用这些模板,项目经理和团队可以更加高效地管理项目,降低风险,提高软件质量,确保项目的成功...

    用Oracle DBCA 工具创建新数据库

    13. **总结与完成**:最后一步会显示创建数据库的总结信息,确认无误后点击“完成”按钮,开始创建数据库。创建过程中,DBCA将自动执行必要的脚本和配置步骤。 #### 四、注意事项 - 在进行数据库创建之前,请确保...

    Java专业实习总结范文(通用3篇).pdf

    作者最后总结了实习的经验和教训,强调了实习的重要性和学习的积累。 知识点: 1. Java 基础知识:包括变量、数据类型、操作符、控制结构、函数、数组、面向对象编程等。 2. 数据库设计:包括数据库的设计、表的...

    数据库编程配置方法(ADO ODBC)

    1. 直接在数据库管理器中建立:通过打开数据库管理软件(如SQL Server Management Studio),右键点击数据库选项,选择新建数据库,设置数据库名和存储路径。接着,可以创建新表,定义表的列属性,并输入数据。 2. ...

    级数据库专业课程设计安排.doc

    评估因素包括程序设计的可用性、实用性、通用性和可扩展性(40%),动手能力和创新精神(20%),总结汇报(20%),以及学习态度(20%)。指导老师和考勤老师会监督和指导,确保设计质量。 【参考题目示例】 基础题...

    sql转oracle数据库工具 V4.0 绿色免费版

    SQL与Oracle分别是两种广泛应用的关系型数据库管理系统,其中SQL(Structured Query Language)是通用的数据库语言,而Oracle则是一个功能强大的商业数据库解决方案。当面临将SQL数据库迁移至Oracle的需求时,一款...

    数据库课程设计资料.docx

    在软件运行时,进行调试和错误修正,最后撰写课程设计报告。 【设计内容示例】 以学生信息管理系统为例,设计内容包括: 1. 分析阶段:明确系统需求,进行需求分析,设计概念模型和逻辑模型。 2. 模块建造:在...

    软件系统开发实习工作总结.pdf

    软件系统开发实习工作总结.pdf 该资源总结了软件系统开发实习工作的经验教训,涵盖了教师信息管理系统的开发过程、技术考虑、系统功能、开发经验和收获。 一、计划的实施情况及工作的详细进程 在开发教师信息管理...

    通用成绩管理系统分享.pdf

    7. **总结**:最后,作者和团队对整个设计过程进行了回顾,总结经验教训,可能存在的问题以及改进的方向。 这个通用成绩管理系统不仅锻炼了团队成员的数据库设计和软件开发技能,也体现了SQL在实际应用中的强大功能...

    springboot师生健康信息管理系统(代码+数据库+LW)

    最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的网上管理系统特别注重交互协调与...

    Java通用Dao包括JDBC和JNDI两种连接方式

    Java通用DAO(Data Access Object)模式是软件开发中用于封装数据访问操作的一种设计模式,它为业务层提供了统一的接口,使得业务逻辑与数据库操作分离,提高了代码的可复用性和可维护性。在Java中,实现通用DAO通常...

    Windows2003双机安装 Oracle MBA.docx

    然后,在B节点上安装Oracle数据库软件,但不要创建数据库。 - **修改目录名称**: 安装完成后,将`oracle`目录重命名为`oracle1`,并在原位置重新创建名为`oracle`的目录。 - **A节点安装**: 停止B节点,确保所有资源...

Global site tag (gtag.js) - Google Analytics