wangchao.org
注册 | 登录 | 添加收藏 | 订阅该频道
 
商城汽车珠宝健康家饰女性王朝网络游戏互联网探索下载娱乐学院
 
数码 | 旅游 | 美容 | 母婴 | 家电 | 美食 | 景区 | 养生 | 手机 | 购车 | 首饰 | 美妆 | 装修 | 厨房 | 科普 | 动物 | 植物 |  | 百态 | 编程 | 商品 | 财经 | 信息 | 军事
  
 
当前位置: 王朝网络 >> java/jsp >> 通用数据库软件完成的最后总结
 

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

字体: ||
  做了约有一个月的软件基本完成,本以为会做成一个和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对象,然后再从中取得表的名称。(王朝网络 wangchao.net.cn)
 
标签: 完成  总结  数据  最后  软件  通用  
做了约有一个月的软件基本完成,本以为会做成一个和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输入的用户名登陆有时出现问题是[url=mailto:odbc@localhost]odbc@localhost[/url]……,不知道怎么回事,在 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翻译的产品,[url=http://www.swissql.com/]http://www.swissql.com/[/url],但是该公司的翻译引擎做得还很不成熟,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对象,然后再从中取得表的名称。
 
声明:王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。
 
网友评论 查看所有评论
 
 
验证码:  
2006-01-09 22:56:30 繁體版 编辑
 
 
转载本文
UBB代码HTML代码
复制到剪贴板...
 
 最新文章
 ·印度暂缓封锁黑莓 紧盯网密服务密钥- ·黑客借钓鱼网站设陷阱-安全资讯 ·黄海波女友周诗雅性感写真-美女明星 ·一起来看看那些天雷滚滚的广告-搞笑
 ·微软推便携式触摸式鼠标Arc Tou ·图说那些世界上最美丽的地方-风景壁纸 ·快递“先签字后验货”被指违法-业内资 ·QQ.CN成为黑龙江联通IDC业务新
 ·拒绝50万美元奖金 跳槽Facebo ·网络管理员工作错误处理常见十宗罪-安 ·李彦宏百度大会 门票遭黄牛热炒-业内 ·李彦宏坦克大战 搜索可在线玩游戏-业
 ·步步追踪 破译远程控制失效之谜-应用 ·2010年度上半年全国病毒传播趋势  ·网络知识:OSPF路由协议基础-应用 ·林志颖娇妻陈若仪照片大曝光-美女明星
 ·十分钟完全体验Maxthon3.0- ·《庄园物语》8月风靡金山游戏世界 - ·表现满意 快车3.7新版下载能力测试 ·学生开学换手机 专家提醒先安全扫描-
 ·卡巴安全部队震撼发布保护网银安全-业 ·360安全:600万网民电脑龟速开机 ·卡巴斯基全力打造交易安全软件-安全资 ·搜狗“五级加速”引领高速浏览时代-网
 
 
© 2005- 王朝网络 版权所有