有关SSI的问题,求大牛指点,3Q!!!

蘑菇頭 2012-04-23 02:15:45
今天项目碰到了一个问题:

ibatis做数据持久层,现在碰到了一个问题,就是——开发的项目 我如何做,才能使自己写的一条SQL 既能访问oracle和mysql呢???

目的:为了方便以后维护,我们只需要写一个SQL,使其自动识别是oracle还是mysql。


言简意赅:

写一条SQL ,它既能操作oracle也能操作mysql


求提供思路

在线坐等…… 亲们,谢谢……
...全文
280 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

看看 有木有解决方案什么的……呵呵……
  • 打赏
  • 举报
回复
只要用标准SQL92的语法,好多数据库都可以执行

可以针对每种数据库写专用xml文件,通过配置文件切换
加载更多回复(4)
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 【久久在线FLASH系统】是一款专为久久在线网站打造的交互式Flash平台,集成了前台展示与后台管理功能,满足内容发布、管理和用户互动的需求。Flash技术曾广泛应用于网页动画和互动内容,尤其在早期互联网时代,在游戏、广告和多媒体教学等领域发挥了重要作用。该系统的核心包括以下几个关键方面: Flash技术:系统利用Flash创建动态图形、动画和交互内容,依赖Adobe Flash Player运行。其编程语言ActionScript支持面向对象开发,便于实现复杂逻辑和交互效果。 后台管理系统:作为系统的控制中心,后台支持内容上传、编辑、分类、权限设置、用户管理及数据分析,确保内容的有序更新与发布。 产品演示模块:用户可在线预览和体验产品功能,无需下载,通过交互式演示了解产品操作流程和优势。 数据库集成:系统与数据库紧密结合,用于存储Flash文件信息、用户数据及访问记录,实现高效的数据管理与检索。 安全性与优化:系统具备防止非法访问和数据泄露的安全机制,并对Flash内容进行优化,提升加载速度与用户体验。 响应式设计:尽管Flash主要用于桌面端,系统仍考虑多设备兼容性,通过响应式设计适配不同屏幕尺寸,提供一致体验。 API接口:系统支持与其他平台或服务通过API进行数据交互,如社交媒体分享、数据分析等,拓展功能边界。 用户体验:界面设计注重交互性与视觉效果,提升用户满意度和停留时间,增强平台吸引力。 版本控制:系统支持内容版本管理,便于追踪更新历史,方便内容维护与回滚。 性能监控:内置性能监控工具,实时跟踪系统负载与资源使用情况,及时发现并解决问题,保障系统稳定运行。 【久久在线FLASH系统】是一个综合性解决方案,融合了前端展示、后台管理、互动体验和数据分析等功能,体现了当时Web
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 BP神经网络轴承故障诊断系统是一种基于人工神经网络技术的智能诊断工具,专门用于识别和分析机械设备中轴承的故障情况。该系统的核心是BP神经网络(即反向传播神经网络),它能够模拟人脑的工作方式,通过学习和训练来处理复杂的非线性问题,从而对轴承的健康状态进行精准评估。 BP神经网络的基本结构由输入层、隐藏层和输出层构成。输入层接收来自传感器的信号,如振动数据或声音频率,这些信号反映了轴承的运行状态。隐藏层负责对输入数据进行特征提取和转换,将原始信号转化为更具价值的信息。输出层则输出最终的诊断结果,例如轴承是否正常、轻微磨损或严重损坏等。 在诊断过程中,数据预处理是至关重要的步骤。原始的振动或声学数据通常含有噪声,且不同传感器的数据可能缺乏可比性。因此,需要对这些数据进行滤波、归一化等处理,以提高数据质量。预处理后的数据随后被输入到BP神经网络中。在训练阶段,网络通过反向传播算法调整权重和阈值,使预测结果尽可能接近实际故障类型。这一过程利用了梯度下降法,通过计算误差梯度来更新网络参数,以最小化损失函数(通常是均方误差,用于衡量预测值与真实值之间的差异)。 BP神经网络的性能受到多种因素的影响,包括网络结构(如隐藏层的数量和每层的神经元数量)、学习率以及训练迭代次数等。优化这些参数对于提升诊断精度和速度至关重要。此外,为了验证和提升模型的泛化能力,通常采用交叉验证方法,将数据集分为训练集、验证集和测试集。其中,训练集用于训练网络,验证集用于调整网络参数,测试集则用于评估模型在未知数据上的表现。 总体而言,BP神经网络轴承故障诊断系统凭借其强大的学习和泛化能力,通过对机械设备振动和噪声数据的分析,能够实现对轴承故障的精确识别。该系统有助于提前发现设备故障隐患,减少停机时间,提高生产效率,对工业领域

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧