通用数据库软件完成的最后总结
2008-02-23 09:41:55来源:互联网 阅读 ()
做了约有一个月的软件基本完成,本以为会做成一个和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,也只是利用到数据库的相当少的一部分功能,没有针对不同数据库的优
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash