社区
Java EE
帖子详情
有关SSI的问题,求大牛指点,3Q!!!
蘑菇頭
2012-04-23 02:15:45
今天项目碰到了一个问题:
ibatis做数据持久层,现在碰到了一个问题,就是——开发的项目 我如何做,才能使自己写的一条SQL 既能访问oracle和mysql呢???
目的:为了方便以后维护,我们只需要写一个SQL,使其自动识别是oracle还是mysql。
言简意赅:
写一条SQL ,它既能操作oracle也能操作mysql
求提供思路
在线坐等…… 亲们,谢谢……
...全文
316
25
打赏
收藏
有关SSI的问题,求大牛指点,3Q!!!
今天项目碰到了一个问题: ibatis做数据持久层,现在碰到了一个问题,就是——开发的项目 我如何做,才能使自己写的一条SQL 既能访问oracle和mysql呢??? 目的:为了方便以后维护,我们只需要写一个SQL,使其自动识别是oracle还是mysql。 言简意赅: 写一条SQL ,它既能操作oracle也能操作mysql 求提供思路 在线坐等…… 亲们,谢谢……
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangkaifang
2012-04-25
打赏
举报
回复
楼主 别纠结了 写两套呗 反正你说的分页 查询啥的 sql也比较简单
蘑菇頭
2012-04-25
打赏
举报
回复
[Quote=引用 23 楼 的回复:]
楼主 别纠结了 写两套呗 反正你说的分页 查询啥的 sql也比较简单
[/Quote]
额 ,这个 这个…… ╮(╯▽╰)╭ 看来 方案 貌似……
不知道 用 ibatis和hibernate的区别,除了优化数据库意外的其他优缺点在哪里???
有木有解答的 , 额 对了 google 一下先……
蘑菇頭
2012-04-24
打赏
举报
回复
坐等 啊 期待大神的 出现………………
蘑菇頭
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
知己啊 心声 泪奔ing…………
蘑菇頭
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
知己啊 心声 泪奔ing………………
安特矮油
2012-04-24
打赏
举报
回复
如果是普通查询分页什么的,用ibatis的<include refid=""/>其分页语句就好,根据不同的数据库引入不同的分页部分
intrejj
2012-04-24
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使用的数据库是什么……
[/Quote]
很多东西说得容易,想起来也容易,但实现起来就不是那回事了!
首先要求只写一套SQL(该要求中),能够在两个数据库中执行,要想通用,除非数据库很精通!
其次你说用方言标示,来说明当前使用的数据库,这点有什么意思!这种相当于写两套SQL,系统自动识别是可以的,但要求是只写一套SQL.
Hibernate能够通过方言实现跨数据库平台,是因为其作者相当于自己实现一套HQL等,再根据你配置的方言编译、转化为该数据库的Native SQL,难道这个过程你能够简单的就实现的了,好说,如果你能够实现,那就不叫IBatis了,那就是Hibenate的克隆了!使用Ibatis的原因就是想数据库自己优化,这样的话就不可能了,那还不如干脆直接使用Hibernate了!
cjoy4856
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
hibernate没有你想的那么神奇。通过hibernate的code为证:
oracle的分页查询(类名称Oracle9iDialect)
public String getLimitString(String sql, boolean hasOffset) {
sql = sql.trim();
boolean isForUpdate = false;
if (sql.toLowerCase().endsWith(" for update")) {
sql = sql.substring(0, sql.length() - 11);
isForUpdate = true;
}
StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
if (hasOffset) {
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
}
else {
pagingSelect.append("select * from ( ");
}
pagingSelect.append(sql);
if (hasOffset) {
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
}
else {
pagingSelect.append(" ) where rownum <= ?");
}
if (isForUpdate) {
pagingSelect.append(" for update");
}
return pagingSelect.toString();
}
MYSQL (类名称MySQLDialect)
public String getLimitString(String sql, boolean hasOffset) {
return sql.length() + 20 + sql + (hasOffset ? " limit ?, ?" : " limit ?");
}
以上均为Hibernate的源码
cjoy4856
2012-04-23
打赏
举报
回复
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使用的数据库是什么
2.将分页的所有的标准SQL写好(数据库商家的标准SQL)
3.哪就是使用Refact的问题了。
我也只能够跟你说这些了。提供思路吧,方法也很简单。
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
还是用Hibernate好点,这种问题很轻松解决叻 ... ... ...
[/Quote]
亲, 能说说 思路 啥的…………
tao_tao
2012-04-23
打赏
举报
回复
还是用Hibernate好点,这种问题很轻松解决叻 ... ... ...
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
[/Quote]
这个…… 项目牵扯到 分页、增上改查 等等…… 所以……
想看看大家 有木有好的解决方案……
fangkaifang
2012-04-23
打赏
举报
回复
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
fangkaifang
2012-04-23
打赏
举报
回复
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
不想写两套的代价是写十套,你不把oracle和mysql都玩明白了,不可能写出来真正通用的,
简单的不带函数的 基本语法都一样。
[/Quote]
0.0 亲, 这个…… 这个…………
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
引用 5 楼 的回复:
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
有的语法是可以两种数据库都支持的 有的不行 比如一些函数 关键字 ……
[/Quote]
恩 是啊 这个 我知道 , 就是 想看看 都支持的,嘿嘿…… 木有不可能,只有想不到啊……
forgetsam
2012-04-23
打赏
举报
回复
不想写两套的代价是写十套,你不把oracle和mysql都玩明白了,不可能写出来真正通用的,
简单的不带函数的 基本语法都一样。
fangkaifang
2012-04-23
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
[/Quote]
有的语法是可以两种数据库都支持的 有的不行 比如一些函数 关键字 什么的
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
[/Quote]
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
15年老程创业中
2012-04-23
打赏
举报
回复
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
加载更多回复(4)
web开发框架 java_Javaweb开发学习路线及Java三大框架分享
Java web开发是什么?Java web开发,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。Java web 开发Java web开发学习路线一:入门...
Javaweb开发学习路线及Java三大框架分享
微信公众号:javafirstJava web开发是什么?Java web开发,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。Java web 开发Jav...
论文复现风光制氢合成氨系统优化研究(Python代码实现)
内容概要:本文围绕风光制氢合成氨系统的优化
问题
,通过复现相关学术论文并结合Python编程实现,构建了涵盖风能、光伏、电解水制氢及合成氨工艺的综合能源系统模型。研究重点在于对系统内多能流耦合关系进行建模,优化可再生能源的消纳与氢能生产调度,提升系统经济性与能源利用效率。文中详细阐述了系统架构设计、关键设备建模、目标函数设定及约束条件处理,并通过Python代码实现了优化求解过程,展示了完整的仿真流程与结果分析。; 适合人群:具备一定Python编程基础和能源系统知识,从事新能源、综合能源系统、氢能等领域研究的研发人员或高校研究生。; 使用场景及目标:①学习如何将风光耦合制氢与化工生产(合成氨)进行系统集成建模;②掌握基于Python的能源系统优化方法,如线性规划、混合整数规划等在综合能源调度中的应用;③复现并深入理解相关领域高水平学术论文的技术路线与实现细节。; 阅读建议:建议读者结合文中提供的代码与模型描述,动手实践并调试程序,重点关注目标函数构建与约束条件的数学表达,同时可扩展模型以适应其他类似多能互补系统的研究需求。
p6880880-190000-Linux-x86-64 OPatch 12.2.0.1.52
OPatch 12.2.0.1.52, the Oracle Interim One-off Patch Installer. This patch (6880880) installs the "OPatch" utility. OPatch is used for patching Oracle software. If you have an older version of opatch it is strongly recommended to back it up before upgrading to the new OPatch.
基于红外热成像的热点检测模拟框架,用于使用MATLAB实现架空铁路架空线系统中的热点检测。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
Java EE
67,535
社区成员
225,843
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章