- 浏览: 158215 次
- 性别:
- 来自: 贵州
-
文章分类
- 全部博客 (149)
- 从业生涯 (10)
- 杂草集 (4)
- 数据库方案 (18)
- VIew层 (1)
- 学习 (10)
- IDE (4)
- JavaScript (10)
- 中间件 (16)
- DWR (4)
- 正则表达式 (2)
- JAVA (10)
- SQL (2)
- 数据结构 (6)
- Spring Security (0)
- JQuery (3)
- JSP (2)
- SEO (1)
- JspRun (1)
- 搜索引擎 (1)
- 信息检索 (5)
- Eclipse (1)
- 日志 (3)
- apache (1)
- Dos (1)
- 标签库 (1)
- 项目管理 (3)
- JSON (2)
- UML (1)
- 职业规划 (5)
- 标准 (1)
- OS (6)
- flash (1)
- 安全 (1)
- 负载均衡 (3)
- jndi (1)
- linux (1)
- bat (1)
- git (2)
- 树莓派 (1)
- Shell (1)
最新评论
-
qingmuxiang:
学无止境
通用数据库分页 扩展dbutil (附代码下载) -
haiyangyiba:
你好,下载了你的例子,主要看了如下方法:public & ...
通用数据库分页 扩展dbutil (附代码下载)
需求:最近接触一个项目需要其兼容主流的数据库。
我用到的包:common-dbutils.jar;log4j;c3p0所需要的包还有什么忘了,大概就这2个
看了下dbutil之前会hibernate,学完hibernate觉得其有点庞大,用来做通用插件不方便。之前看了dbutil源码总结下,发表出来。大家看了后给点改进方案。
问题一:Oracle、mysql、mssql数据库大字段如何做到通用,提高我们程序的兼容性?
问题二:Oracle、mysql、mssql如何统一分页功能,提高我们程序的兼容性?
我的解决思路是:
问题一:对于各家不同的字段统一均用String来代替,让我们的程序中没有乱七八遭的数据类型,像苍蝇一样在你身边乱飞(哦对不起不是一只……)。
问题二:老实说要想做到统一的分页方法,我觉得在sql不确定的情况下很难。这个问题hibernate也是这样想的。hibernate是配置参数,来判断你是使用的什么数据库
从而根据xml配置文件中的你的数据表结构的描述,来分别套用写好的分页方法。对于这点hibernate值得我膜拜。
我的代码处理思路:
在网上找了许多插件,最终觉定改造dbutil,因为其轻量级,让我喜欢得非常。
1、过滤乱七八遭的数据类型(目前我只知道clob类型不好处理,首先将其结果查询出来转换为String,其它的类型你自己扩展)
WebSite/src/org/apache/commons/dbutils/JDBCPaginRunner.java
2、对于分页的问题,我目前只写了针对jdbc中的指针分页功能。其实各家数据库老板都提供了相当不错的接口。比如oracle、mysql这些都是比较不错的,受咱们程序员的喜爱、但是使用方法不同,给我们带来了不便,导致代码不能很好的移植。
于是我只有通过JDBC的指针来实现分页了。当然,你也可以自己写基于其它数据库的扩展的分页插件。只需要替换以下程序就行。还是来看看我写的基于指针的分页
局限性:
1、sql中使用的聚合函数比较难处理。
2、sql中的查询语法 要除掉数据库厂家的分页语句(如果你不把它去除,那该怎么移植到其它数据库上呢?又如何做到程序能够适应主流数据库呢?)
/WebSite/src/org/apache/commons/dbutils/NoClobRowProcessor.java
3、使用篇
提供2个方法便捷开发:一个是我在网上借鉴了一个网友的方法,稍作修改(使用基于c3p0来开发)
使用的时候有2种方法:
1、普通查询:(细分传值与传sql)
/WebSite/src/org/apache/commons/dbutils/DbUtils.java
2、分页查询:(细分为需要返回总数与不需要返回总数的情况,封装结果为bean或者封装Map与List,Object,Array等均支持。)
/WebSite/src/org/apache/commons/dbutils/pagin/Page.java
/WebSite/src/org/apache/commons/dbutils/pagin/PagingUtil.java
package db; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.pagin.Page; import org.apache.commons.dbutils.pagin.PagingUtil; import baidu.UP_INFO; /*我封装的数据库 create table INFO_LINK( resource_id VARCHAR2(50) not null, info_title VARCHAR2(50),default '0' ) */ public class TestApp { public static void main(String[] args) { String sql="select * from up_info"; String sql2="select * from up_info where resource_id=? or info_title=?";//分页时不能用特殊的分页语法(Oracle、Mssql) Object[] objects=new Object[]{"59","abc"};//参数 try{ /* * 普通查询--------返回map */ //不带参数查询 List<Map<String, Object>> listMap=new DbUtils().queryToArrayList(sql); //带参数查询 listMap=new DbUtils().queryToMapList(sql2,objects); /* * 普通查询--------返回bean */ //带参数 List<UP_INFO> listBean=new DbUtils().queryToBeanList(UP_INFO.class,sql2,objects); //不带参数 listBean=new DbUtils().queryToBeanList(UP_INFO.class,sql); //######### 展示分页功能 #########(第一页:0至5) /* * 不带返回值分页 */ //不返回总记录分页-返回List of map listMap=new DbUtils().queryToMapList(sql2,objects,0,5); //不返回总记录分页-返回List of bean listBean=new DbUtils().queryToBeanList(UP_INFO.class,sql2,objects,0,5); /* * 带返回值分页 */ //带参数不带返回值 Page<Map<String,Object>> page=PagingUtil.toMapList(true,sql2, objects,0,5); System.out.println("总记录:"+page.getRowCount()+"\t内容:"+page.getList()); //不带参数分页 page=PagingUtil.toMapList(true,sql,null,0,5); System.out.println("总记录:"+page.getRowCount()+"\t内容:"+page.getList()); }catch (Exception e) { e.printStackTrace(); } } }
- org.zip (14.8 KB)
- 下载次数: 209
评论


public <T> T limit(boolean getMaxRow,Connection conn, String sql,Object[]params,ResultSetHandler<T> rsh,int...limit)throws Exception{
int start=0;
int end=1;
if(limit!=null){
if(limit.length==1){
start=0;
end=limit[0]<0?0:limit[0];
}else{
start=limit[0];
end=limit[1]<0?0:limit[1];
}
}
start=start<0?0:start;
PreparedStatement stmt = null;
ResultSet rs = null;
T result = null;
try {
if(getMaxRow){
getCount(conn, sql, params);
}
stmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
this.fillStatement(stmt, params);
stmt.setMaxRows(end);
rs = this.wrap(stmt.executeQuery());
if(rs.next()){
rs.absolute(start);
result = rsh.handle(rs);
}
} catch (SQLException e) {
e.printStackTrace();
this.rethrow(e, sql, params);
} finally {
try {
close(rs);
} finally {
close(stmt);
}
}
return result;
}
我个人认为,这种查询是一次性加载所有的数据到内存,然后再从内存中游标定位,最后获取maxRows记录,maxRows为pageSize了,是不是一次性加载到内存呢?
发表评论
-
Mysql安装
2015-10-18 22:18 523最近要配置一些项目管理工具,要用到MYSQL于是就想去下个 ... -
SqlServer2005 上安装 SqlServer2008 JTDS连接
2015-02-05 23:05 676SQLServer2008不能直接升级安装SQLServer ... -
Mysql 连接池与线程太小的设置
2015-01-26 02:09 639my.ini thread_cache_size=1 ... -
linux 定时备份数据库及文件
2014-12-24 18:41 4801、创建保存备份文件的路径/mysqldata ... -
Mysql 修复表
2014-12-17 11:13 568数据库:mysql -uroot -p 1 ... -
msql 乱码
2014-09-01 16:11 581mysql> SHOW VARIABLES LIKE ... -
c3p0
2014-07-10 11:26 595#驱动 c3p0.driverClass=net.sour ... -
SQLServer 2005 识别连接到服务器的客户端
2014-06-24 18:32 620以下示例返回连接到服务器的连接数,并显示起始 IP 地址和 ... -
mysql 允许远程登陆
2014-02-26 11:08 636当安装完数据库后,会发现由于权限控制,导致不能远程连接 ... -
Mysql备份
2014-01-17 11:38 669mysqldump --add-drop-table -u ... -
命令启动Mysql
2014-01-06 15:08 579@echo off copy C:\Program Fi ... -
mysql 授权用户远程登陆
2013-12-19 12:09 652你想myuser使用mypassword从任何主机连接到mys ... -
ORACLE备份与恢复
2012-12-29 14:06 733第一步: 导出数据库: 1 将数据库TEST完全导出,用户 ... -
Oracle
2012-11-21 22:57 0修改 sqlplus /nolog; connec ... -
DBUTIL
2011-10-29 12:17 5265package thtf.ebuilder.db; ... -
Sql中使用变量
2011-09-27 11:36 6971.同时更新2个字段:update 帐号表2 s ... -
SQL中显示表名和字段名
2010-10-15 12:18 1705sql语句读取sqlserver和access中的所有表名 ... -
查询MS SQL Server中表占用空间
2010-04-08 16:31 1233select object_name(id) tablenam ...
相关推荐
为了提高代码的可读性和可维护性,DBUtil通常会采用连接池技术,如Druid或C3P0,来管理数据库连接,避免频繁创建和关闭连接带来的性能损耗。 分页功能在大型数据集的展示中尤为重要。在学生信息管理系统中,可以...
刘嘉怡.中期检查.doc
内容概要:本文详细介绍了如何使用COMSOL Multiphysics进行热电效应仿真的全过程。首先解释了热电效应的基本概念及其应用场景,如手机充电发烫、吹风机温度升高等。接着,通过具体实例展示了如何在COMSOL中建立热电模型,包括选择合适的物理场(焦耳热和热电效应)、设定材料属性(电导率、导热系数、塞贝克系数)、绘制几何形状以及设置边界条件。文中还提供了详细的MATLAB代码片段用于自动化建模流程,涵盖求解器配置、网格划分、后处理等方面的技术细节。此外,作者分享了一些常见问题的解决方案,如求解器不收敛、网格畸变等。 适合人群:对热电效应感兴趣的科研人员、工程技术人员及高校学生,尤其适用于有一定COMSOL和MATLAB基础的学习者。 使用场景及目标:帮助读者掌握热电效应的基本原理和COMSOL仿真技能,能够独立完成从模型构建到结果分析的完整流程。目标是提高热电转换系统的效率,优化设计参数,探索新材料的应用潜力。 其他说明:文章不仅提供了理论指导,还包括大量实战经验和技术技巧,有助于解决实际建模过程中遇到的问题。
内容概要:本文深入探讨了汽车内外饰模具设计的关键要素,涵盖分型面设计、斜顶和滑块的应用、模架选择以及顶出系统的配置。针对每个部分,不仅提供了理论指导,还辅以Python、MATLAB等编程语言的实际代码示例,帮助理解和实施具体设计方案。例如,分型面设计强调了如何根据产品结构和外观要求确定最佳分型面位置;斜顶和滑块部分讨论了不同类型及其应用场景;模架和顶出系统则关注于结构稳定性和顶出效果的优化。 适合人群:从事汽车模具设计的专业人士,尤其是希望深入了解内外饰模具设计细节的新手设计师和技术人员。 使用场景及目标:适用于汽车内外饰模具设计项目,旨在提高模具设计的精度和效率,减少试错成本,确保产品质量。通过学习本文提供的技术和实践经验,能够更好地应对实际工作中遇到的各种挑战。 其他说明:文中提到的代码示例和经验公式均来源于实际工程案例,具有较高的参考价值。同时,作者还分享了许多宝贵的行业经验和技巧,有助于读者快速掌握模具设计的核心技能。
python3.10以上 可安装pyside6(类似pyqt),具体安装操作步骤
内容概要:DeepSeek AI是由杭州深度求索人工智能基础技术研究有限公司于2025年1月20日发布的深度探索AI技术。它具有多模态能力、多语言支持、长上下文理解、领域垂直优化、开源特性等多项技术突破,支
IIS配置phpweb服务器所需VC_redist.x64.rar
云南移动5G-A网业战略发展探讨 -创新领航,千帆竞发,共同迈入5G-A新时代.pptx
本文描述了如何使用C#基于OpenCvSharpe实现模版匹配功能,其中实现了下功能: 1、图像加载; 2、模版加载、绘制、保存功能; 3、模版匹配功能。
内容概要:本文档汇集了CSci 235软件设计与分析II课程中关于数据结构的面试题,由Stewart Weiss教授整理。文档涵盖了广泛的数据结构主题,包括但不限于链表(如单链表、双向链表、循环链表)、二叉树(如二叉搜索树、最小高度二叉搜索树)、栈、队列等。每个问题都旨在考察求职者对不同数据结构的理解及其应用场景。例如,选择合适的数据结构实现手机通讯录功能,或设计支持撤销功能的文本编辑器。此外,文档还探讨了复杂度分析(Big-O表示法),以及如何优化特定操作的时间复杂度。最后,文档提供了额外的学习资源链接,帮助求职者进一步准备面试。 适合人群:计算机科学专业的学生或有志于从事软件开发工作的求职者,特别是那些希望在技术面试中表现优异的人士。 使用场景及目标:①理解并掌握常见数据结构的基本概念和特性;②学会根据不同场景选择最合适的数据结构;③掌握常见数据结构操作的时间复杂度分析;④为技术面试做充分准备,提高面试成功率。 其他说明:文档中的问题不仅限于理论知识,还包括实际编码练习,建议读者在学习过程中动手实践,以加深理解和记忆。同时,文档提供的额外资源链接可以作为扩展阅读材料,帮助读者更全面地掌握相关知识。
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
帆软本地打印插件FinePrint 8.0版本,适用于FineReport8
内容概要:本文介绍了密歇根大学EECS 461课程——嵌入式控制系统的核心内容及其发展背景。课程旨在教授学生嵌入式控制系统的理论与实践,包括传感器和执行器接口、实时性能和安全要求、混合行为系统、分布式控制网络等方面的知识。文中特别强调了现代汽车作为嵌入式控制系统的典型应用,从1977年到2019年间,汽车技术经历了从模拟控制到微处理器控制的巨大变革,如今的汽车具备了更高效、更环保、更安全的特点。课程还涵盖了S32K144微控制器的开发环境、实验室练习(如数字I/O、PWM信号生成、虚拟墙模拟等)以及自动代码生成工具的使用。 适合人群:具备一定编程基础,特别是对嵌入式系统感兴趣的本科生和研究生,尤其是电气工程、计算机科学专业的高年级学生或硕士生。 使用场景及目标:①了解嵌入式控制系统的基本概念和发展历程;②掌握嵌入式控制系统的设计方法和技术手段,如实时操作系统、中断处理、网络通信协议(CAN)等;③通过实际项目操作,熟悉嵌入式硬件平台和开发工具链的应用。 其他说明:随着汽车行业向智能化、自动化方向发展,对于能够开发复杂嵌入式软件的人才需求日益增长。EECS 461不仅为学生提供了扎实的技术训练,也为他们未来的职业发展打下了坚实的基础。此外,课程还反映了跨学科教育的重要性,鼓励学生打破传统学术界限,培养解决实际问题的能力。
内容概要:本文详细介绍了如何利用C#与Halcon联合编程构建高效的视觉几何定位与测量框架。主要内容涵盖模板创建与匹配、圆测量、数据持久化以及图像采集等方面的技术细节。首先,通过创建形状模板并进行匹配,实现了工件的精确定位。接着,针对圆形物体的测量,提出了动态ROI绘制、亚像素边缘提取和稳健圆拟合的方法。此外,还讨论了模板管理和图像采集的最佳实践,确保系统的稳定性和高效性。最后,强调了Halcon对象的内存管理和错误处理机制,提供了实用的优化建议。 适合人群:具备一定编程基础,尤其是对C#和Halcon有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于工业生产线上的自动化检测设备开发,旨在提高工件定位和尺寸测量的精度与效率。主要目标是帮助开发者掌握C#与Halcon联合编程的具体实现方法,从而构建稳定可靠的视觉检测系统。 其他说明:文中提供了大量实战代码片段和调试技巧,有助于读者快速理解和应用相关技术。同时,作者分享了许多实际项目中的经验和教训,使读者能够避开常见陷阱,提升开发效率。
内容概要:本文深入探讨了DeepSeek AI的独特优势及其在全球AI领域的影响力。DeepSeek由中国深度求索公司开发,自2025年1月20日发布以来,凭借其卓越的性能和独特优势迅速吸引了全球关注。其核心优势包括:1) 极致成本效率,如低成本训练和高效推理;2) 强大的推理能力,涵盖多领域表现优异
php连接sqlserver之VC_redist.x64.exe
内容概要:本文详细介绍了利用Matlab/Simulink进行异步电动机交流调速系统的仿真实验,主要探讨了两种控制方式:恒压频比(V/F)开环控制和转差频率闭环控制。文中不仅提供了具体的数学模型和代码片段,还展示了不同控制方式下的仿真结果对比,包括转速响应、电流波形和谐波含量等方面的表现。此外,文章深入讲解了SVPWM(空间矢量脉宽调制)的应用,强调了其相对于传统SPWM的优势,并给出了详细的参数调整技巧和注意事项。 适合人群:从事电机控制系统设计的研究人员和技术人员,尤其是对Matlab/Simulink有一定基础并希望深入了解异步电动机调速系统的人群。 使用场景及目标:适用于需要进行电机控制算法开发和优化的场合,旨在帮助读者掌握异步电动机调速的基本原理和具体实现方法,提高仿真的准确性和效率。 其他说明:文章通过丰富的实例和图表,生动地展示了各种控制策略的特点和效果,有助于读者更好地理解和应用相关理论。同时,文中提供的调试技巧对于解决实际工程中的常见问题非常有帮助。
内容概要:本文详细介绍了如何利用Matlab进行电动汽车等速工况续驶里程的仿真。首先解释了等速工况的概念及其重要性,接着展示了具体的参数设定,如车辆质量、风阻系数、电池容量等。然后深入探讨了核心算法,包括阻力计算、功率需求、能量消耗以及SOC(剩余电量)的变化过程。文中特别强调了一些常见的陷阱和注意事项,如单位换算错误、电机效率的动态变化等。最后,通过可视化工具展示了仿真结果,并讨论了可能的改进方向,如引入NEDC工况循环和其他动态因素。 适合人群:新能源汽车专业的学生、研究人员以及对电动汽车仿真感兴趣的工程师。 使用场景及目标:①帮助理解和掌握电动汽车等速工况续驶里程仿真的原理和方法;②提供详细的代码实现和注释,便于学习和修改;③用于课程设计、毕业设计或其他研究项目。 其他说明:本文不仅提供了完整的Matlab代码,还包括详细的参数说明和常见问题解析,确保使用者能够顺利运行并理解整个仿真过程。同时,作者还分享了许多实践经验,有助于提高仿真的准确性和实用性。
【定稿】桂林电子科技大学第七届大学生思政课社会实践优秀成果展示活动实施方案 (1).zip