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语句)在其他的数据库可能没有对等的实现方式,此时无法对此特性跨平台了。
分享到:
相关推荐
2007数据库兼容包,你会有意向不大的惊喜
用Qt的模型视图实现数据库的基本操作,增删改查,是练习Qt数据库、模型视图、布局的一个综合实例
《Java Web从入门到精通》开始主要介绍Servlet、JSP、JavaBean、EL、JSTL、JDBC等Web开发基础知识,然后学习Struts、Hibernate、Spring、Ajax、JSF等开源框架,并最终学习如何整合这些开源框架进行J2EE开发,如何...
"使用C#中的DataGridView控件实现数据库增删改查" 在C#中使用控件DataGridView实现数据库增删改查是一个常见的需求,特别是在Windows应用程序开发中。DataGridView控件是C#中一个功能强大且灵活的控件,用于显示和...
用qt 实现 图片的 mysql 数据库的上传 下载 并显示图片的功能
内部java实现多个数据库,保持数据同步案例。
将txt中的数据读取并存入sqlite中,利用tkinter将数据库增删改查界面化,并将数据库数据显示至treedata树结构中,详情请看博文https://blog.csdn.net/qq_40435493/article/details/103567881
Android实现查询数据库,把数据库内容显示到屏幕
书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分—存储管理器、查询处理器和事务管理器的实现技术。书中还对信息集成的最新技术,例如数据仓库、OLAP、数据挖掘、Mediator、数据...
TiDB 一个分布式NewSQL数据库兼容MySQL协议
此代码用python实现了连接本地数据库,然后实现注册和登录,在存储密码时使用了哈希值存储。
斯坦福大学 课后习题答案 详细解答 部分
用C#写的实现数据库备份与还原的工程(VS2008下可直接运行,低于08的版本可以拷贝代码实现,记得要在COM中添加SQLSMO引用,本例数据库为SuperMarket,请更改为你所需备份的数据库),个人特意将两种方法放在同一工程...
国产化指引
书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分-存储管理器、查询处理器和事务管理器的实现技术。书中还对信息集成的最新技术,例如数据仓库、OLAP、数据挖掘、Mediator、数据...
用myeclipse实现一个注册界面,并连接数据库将注册的信息显示出来
java_web java实现oracle 数据库备份
java实现Excel数据导入到数据库,如果数据库中存在就更新。 数据库数据导入到Excel表中。
java实现上传图片存入到数据库,只能用炫酷来形容,感兴趣就下载看看吧
哈工大 软件设计2 c++实现简单数据库 功能:select、 insert(插入后排序)、create、delete等 比较全面