`
LucasLee
  • 浏览: 206237 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

实现数据库兼容并不象你想象的那么难

阅读更多
ylt 写道

我同意Readonly的观点。如果不用hql,想实现数据库兼容就太难了。
举个例子,在很多手工录入的表格中都要记录录入时间/操作人/备注,我在java中使用date/person/comment来表示,可是java的关键字和sql的是不一样的,不同数据库也有各自的扩展关键字,上面那几个字段很可能就是某种数据库的关键字。用hql,我所有的查询语句就可以保持统一,切换数据库只需要修改mapping。实际上我写了一个自动根据数据库关键字修改mapping的类,这样连mapping文件也只需要一个。


实现数据库兼容并不象你想象的那么难。:)
我做的平台软件在多种数据库上测试过,包括:Oracle9(10),SqlServer2000,MySql4(5),PostgreSQL8,
HyperSonic。
操作包括CRUD,查询也有比较复杂的。
兼容数据库的步骤如下:
1)数据库DDL是要自行处理的。当然可以借助PowerDesigner的自动转换数据库功能,虽然也有bug,其实主要无非就是一些数据类型的转换,手写也可。
2)CRUD中的字段类型。JDBC的PreparedStatement已经帮你将所有的字段类型都封装了,比如不需要为了插入日期型等数据调用数据库本地的函数,ps.setDate()即可。
3)CRUD之SQL语法。ANSI SQL标准虽然贯彻得不够彻底,但常用的语法的确得到了一致认可。比如,表的左外连接在Oracle8里只有a.field1=b.feild2(+)这种方式,但在Oracle9以后,都支持标准的left outer join on语法了。这种语法在上述5种数据库都得到支持。其他的别名的语法也支持良好。
我碰到的一个比较搞的问题就是SQLserver2000种删除语句不能给表设置别名,即不能delete from TABLE a where a.id=?,去除别名无问题。
4)结果分页。这个的确是我碰到的最需额外处理等问题。我就是参考了hibernate的方法解决的,提供通用的ResultSet滚动方式,以及使用数据库特有的方式在SQL级别上实现,如Oracle中使用RowNum。
5)ID生成问题。不同数据库有各自优化的方式,也可以使用通用的方式。也参考hibernate。
6)其他问题。比如Oracle里的hierachical query(connect by语句)在其他的数据库可能没有对等的实现方式,此时无法对此特性跨平台了。

分享到:
评论
1 楼 zhangyanqiu 2009-01-07  
能具体的说明一下,例如几个例子么???

相关推荐

    oracle数据库入门学习.pdf

    首先,学习Oracle数据库并不像许多人想象的那么困难。对于初学者,可以从以下几个步骤开始: 1. **安装Oracle数据库软件**:Oracle 10g的安装过程已经非常友好,采用的是图形化界面,几乎全程自动化。在Windows 7...

    数据库设计-网上订餐系统.doc

    系统旨在解决现有订餐模式中存在的问题,如信息记录不及时、菜品展示不直观、预约诚信问题以及人力资源浪费等。通过构建一个图文并茂、信息实时更新的在线订餐系统,可以大大提高订餐效率和用户体验。 **需求分析**...

    DbSigSlot.7z

    5. **版本控制**:在数据库升级或更新过程中,签名可以用来验证新版本的正确性,防止不兼容或损坏的更新。 6. **审计和追踪**:签名也可以用于审计目的,通过记录谁修改了什么以及何时修改,以满足合规性和监管要求...

    自动生成实体类

    不过,可以想象,如果你的实体类生成工具结合DevExpress的组件,那么在生成的实体类基础上,你可以快速构建出美观且功能丰富的数据展示界面。 总的来说,自动生成实体类的工具是提高开发效率的有效手段,它减少了...

    SQL-99.pdf

    布尔类型的加入使得数据库能够存储逻辑值(TRUE, FALSE, NULL),并进行布尔运算,这对于实现复杂的查询条件、逻辑判断及数据校验来说是极为有用的。布尔类型不仅仅是一个简单的数据类型,它更是一种新的表达和处理...

    php网页文字游戏

    这种类型的游戏通常具有较低的系统需求,因为它们不依赖于复杂的图形资源,而是通过故事叙述和角色互动吸引玩家。在这款特定的"仙侠类文字游戏"中,我们能够看到PHP作为服务器端编程语言的运用,它负责处理游戏逻辑...

    大数据管理与分析.pdf

    随着信息技术的发展,数据的产生速度远超人们的想象,因此如何有效管理并利用这些海量数据成为了当今社会面临的一大挑战。 #### 二、大数据的特点 文档提到大数据具有以下几个特点: 1. **Volume(大量)**:指数...

    MUD文字游戏web版,最新手机mud文字游戏,PHP源码.zip

    MUD游戏通常不依赖图形界面,而是依赖玩家的想象力和文字描述。 本资源提供的是一个基于Web的MUD游戏,特别优化了适配手机端的体验。这种类型的MUD游戏通过浏览器即可游玩,无需下载客户端,极大地拓宽了玩家群体和...

    Oracle Database In-Memory功能白皮书.docx

    5. **高可用性与兼容性**:Oracle Database In-Memory设计为100%兼容现有的Oracle数据库应用程序,无需进行代码更改即可部署。此外,它采用了高可用性架构,确保系统的稳定性和安全性。 6. **存储分层**:Oracle ...

    网管教程 从入门到精通软件篇.txt

    、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件 DBX:DataBearn图像;Microsoft Visual FoxPro表格文件 DCT:...

    JAVA 23种模式

    这个模式允许你在不修改具体实现的情况下,改变对象的行为。比如,你可以组合“早上好”和“新发型”这两个元素,以适应不同场景下的问候。 以上就是对JAVA 23种模式中提及的几种设计模式的详细解析。这些模式在...

    动态网页 实验 设计

    在这个实验设计中,虽然没有涉及服务器端代码,但我们可以想象,当用户填写完信息并提交后,这些数据可以通过JavaScript发送到服务器,服务器端的程序会处理这些数据,如验证、存储到数据库,并可能返回相应的反馈...

    玫瑰花程序

    最后,为了让更多的人能够访问并享受这个程序,需要考虑跨平台兼容性,包括Web、Android和iOS。这就需要了解React Native或Flutter等跨平台开发框架,以及适应不同设备和屏幕尺寸的响应式设计。 综上所述,“玫瑰花...

    模拟火车trs地形导入工具

    一旦有了DEM,HOG软件就可以将其解析并转化为游戏兼容的地形格式。 在导入过程中,用户可以调整各种参数,如地形比例、细节级别和纹理贴图,以确保导入的地形与游戏环境协调一致。软件可能还支持多层地形编辑,让你...

    山中访友_csdn

    所以,根据要求生成IT知识点似乎并不适用于这段文本。不过,如果我们把“山中访友”理解为是一个项目或产品的名字,那么我们可以在不脱离文本原意的基础上,进行一些IT方面的联想和知识点构建。 1. 项目或产品命名...

    Python库 | Haroun-0.1.1.tar.gz

    1. **版本兼容性**:确保Python库与你正在使用的Python版本兼容,避免出现不兼容导致的错误。 2. **依赖管理**:安装库时,可能需要其他依赖库,使用pip会自动处理这些依赖。 3. **文档阅读**:理解库的官方文档,...

    JAVA 23设计模式一点就通

    想象你有一台旧打印机,它只能连接到串行端口,但是你的新电脑只有USB端口。这时候,你就可以使用一个适配器来将打印机连接到电脑上,这样电脑就能识别并使用这台打印机了。 ##### DECORATOR(装饰者模式) 装饰者...

    基于java的模拟ATM取款机系统

    同时,SWING的组件是轻量级的,不依赖于底层操作系统,因此跨平台兼容性更好。在构建ATM系统时,开发者可能会结合AWT和SWING,利用它们各自的优点。 **序列化** 在这个项目中扮演了关键角色。序列化是将对象的状态...

    血液全程安全监控管理平台方案.pdf

    导致会有个别字识别错误或者漏识别的情况, 请你自己理解并使其通顺”来发挥想象力,构建一个可能的知识点。 首先,从标题我们可以了解到,这个文件是关于一个血液安全监控管理平台的方案,这个平台专注于血液从采集...

    三国群侠传mod制作工具

    使用时,确保你下载的是最新版本,因为更新往往带来更多的功能和更好的兼容性。 总的来说,"三国群侠传mod制作工具"是玩家发挥创意、展现才华的平台,通过它,玩家可以将自己的想象力融入到游戏中,创造出独一无二...

Global site tag (gtag.js) - Google Analytics