起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1596|回复: 1

[处理中5] 代码实现的缺陷。

[复制链接]

10

主题

35

帖子

148

积分

初级会员

Rank: 2

积分
148
QQ
发表于 2014-3-22 16:17:58 | 显示全部楼层 |阅读模式
本帖最后由 linxin@msn.com 于 2014-3-22 16:21 编辑

BIZAPI 中的 DatabaseProduct 实现有点囧。
paramConnection.getMetaData().getDatabaseProductName() 被反复调用,  使用MYSQL 数据库的好悲剧,需要调用10多次才能返回。
  1. public enum DatabaseProduct
  2. {
  3.   ORACLE,  MSSQL,  HSQLDB,  SYBASE,  DB2,  KINGBASE,  DEFAULT,  MYSQL;
  4.   
  5.   private static Logger logger = Logger.getLogger(DatabaseProduct.class);
  6.   
  7.   private DatabaseProduct() {}
  8.   
  9.   public static DatabaseProduct getProduct(Connection paramConnection)
  10.     throws SQLException
  11.   {
  12.     Utils.check(Utils.isNotNull(paramConnection), CommonMessages.class, "JUSTEP050006", "conn");
  13.     if (logger.isDebugEnabled())
  14.     {
  15.       logger.debug("Connection product name:" + paramConnection.getMetaData().getDatabaseProductName());
  16.       logger.debug("Connection product version:" + paramConnection.getMetaData().getDatabaseProductVersion());
  17.     }
  18.     if ((paramConnection.getMetaData().getDatabaseProductName().equals("Oracle")) || (paramConnection.getMetaData().getDatabaseProductName().equals("OSRDB"))) {
  19.       return ORACLE;
  20.     }
  21.     if (paramConnection.getMetaData().getDatabaseProductName().equals("Microsoft SQL Server")) {
  22.       return MSSQL;
  23.     }
  24.     if (paramConnection.getMetaData().getDatabaseProductName().equals("sql server")) {
  25.       return SYBASE;
  26.     }
  27.     if ((paramConnection.getMetaData().getDatabaseProductName().equals("ASE")) || (paramConnection.getMetaData().getDatabaseProductName().equals("Adaptive Server Enterprise"))) {
  28.       return SYBASE;
  29.     }
  30.     if (paramConnection.getMetaData().getDatabaseProductName().startsWith("DB2")) {
  31.       return DB2;
  32.     }
  33.     if (paramConnection.getMetaData().getDatabaseProductName().equals("HSQL Database Engine")) {
  34.       return HSQLDB;
  35.     }
  36.     if (paramConnection.getMetaData().getDatabaseProductName().equals("KingbaseES")) {
  37.       return KINGBASE;
  38.     }
  39.     if (paramConnection.getMetaData().getDatabaseProductName().equals("MySQL")) {
  40.       return MYSQL;
  41.     }
  42.     throw KSQLException.create("JUSTEP150030", new Object[] { paramConnection.getMetaData().getDatabaseProductName() });
  43.   }
  44. }
复制代码

31

主题

1856

帖子

3070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3070
发表于 2014-3-24 08:49:11 | 显示全部楼层
谢谢楼主反馈,这样写法会有一定性能损失,后续版本中将修正
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-21 22:19 , Processed in 0.097389 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表