当前位置: 技术问答>java相关
一个程序如何连接任何一个大型数据库呢?
来源: 互联网 发布时间:2015-02-03
本文导语: 一个程序,Java写的,可能运行在不同平台上,但更重要的是可能连接不同的数据库。平台不会有什么大问题,但连接数据库有什么较好的办法吗?前提是程序不会只用标准的SQL语句,肯定会有数据库特定的SQL函数等...
一个程序,Java写的,可能运行在不同平台上,但更重要的是可能连接不同的数据库。平台不会有什么大问题,但连接数据库有什么较好的办法吗?前提是程序不会只用标准的SQL语句,肯定会有数据库特定的SQL函数等等。
目前想出的方法是写一个配置文件,文件中定义若干SQL格式与各种数据库的实现方式,但这种方法很不方便,实现很困难,SQL语句格式不可能穷尽的,且参数个数/表的个数等都会影响格式,有哪位大虾碰到过类似的问题吗?请指教!!!
目前想出的方法是写一个配置文件,文件中定义若干SQL格式与各种数据库的实现方式,但这种方法很不方便,实现很困难,SQL语句格式不可能穷尽的,且参数个数/表的个数等都会影响格式,有哪位大虾碰到过类似的问题吗?请指教!!!
|
除了尽量少使用非标准sql外,没有很好的解决方法
如果你的java程序要移植到不同的后台数据库上,不修改代码是完全不可能的,你的driver和connection string总要改的吧
碰到特定函数只有修改没有办法
而返回值不一样可以先转换成为某一个java类,然后再作别的处理
我的程序中碰到的日期的问题就是这样解决的
如果你的java程序要移植到不同的后台数据库上,不修改代码是完全不可能的,你的driver和connection string总要改的吧
碰到特定函数只有修改没有办法
而返回值不一样可以先转换成为某一个java类,然后再作别的处理
我的程序中碰到的日期的问题就是这样解决的
|
to stellaxyq:
当然driver和connection是要改的,但是对于特定函数,我觉得这是jdbc作的事,你可以
举个具体例子说明吗?假如某sql语句有oracle的特定函数,那么这个sql在sqlserver就会出错,那么看SQLException就行了。
我不知道你说的是不是这个意思,把某一数据库的特定函数转换成其他数据库的特定函数。
我觉得这样没有必要,对于select count(field1),field2,field3 from table group by
field1这个语句来说,有的数据库可以运行,有的数据库group by后面加上所有查询字段才可以
运行,对于这样的情况,那是不是要程序每次都要解析sql,这样会使效率很差,得不偿失。
总之,我觉得使用者必须有一定的限制,这是当时我们公司作需求时得出的结论。请
stellaxyq指教。
当然driver和connection是要改的,但是对于特定函数,我觉得这是jdbc作的事,你可以
举个具体例子说明吗?假如某sql语句有oracle的特定函数,那么这个sql在sqlserver就会出错,那么看SQLException就行了。
我不知道你说的是不是这个意思,把某一数据库的特定函数转换成其他数据库的特定函数。
我觉得这样没有必要,对于select count(field1),field2,field3 from table group by
field1这个语句来说,有的数据库可以运行,有的数据库group by后面加上所有查询字段才可以
运行,对于这样的情况,那是不是要程序每次都要解析sql,这样会使效率很差,得不偿失。
总之,我觉得使用者必须有一定的限制,这是当时我们公司作需求时得出的结论。请
stellaxyq指教。
|
加一层中间代码
例如时间的问题,sql server用#2001-1-1#来表示时间,可用作比较
而oracle 要求转换 to_date(2001-1-1,'yyyy-mm-dd')才表示时间
这样你可以写一个中间函数,在程序中可以用String(或别的)来表示时间字串
遇到要和数据库交互前用parseDate(String date)来代替原来的date
parseDate根据不同的数据库把他转换成不同的表示方法,也可以一个数据库写一个类专门作这种转换,使用那各类由property的配置文件决定
例如时间的问题,sql server用#2001-1-1#来表示时间,可用作比较
而oracle 要求转换 to_date(2001-1-1,'yyyy-mm-dd')才表示时间
这样你可以写一个中间函数,在程序中可以用String(或别的)来表示时间字串
遇到要和数据库交互前用parseDate(String date)来代替原来的date
parseDate根据不同的数据库把他转换成不同的表示方法,也可以一个数据库写一个类专门作这种转换,使用那各类由property的配置文件决定
|
加多一层做数据转换和业务逻辑封装,就可以避免这个问题了。通常,大型应用都不是直接联数据库的,中型系统也可以做成这样子。
:)
:)