- 浏览: 1198525 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
Jdbc 和hibernate
一、Jdbc是java连接数据库的基础,无论那种框架,只要用到数据库都需要jdbc,所以掌握了jdbc的细节了才能用好更高级的框架,如hibernate。
以下总结了jdbc的性能和效率(主要从处理时间和内存消耗上做出比较),希望能给大家带了益处。
1. Statement和PreparedStatement
2. 插入数据(一次1万条)。
3. 读数据。
4. 脏数据的问题。
5. 锁表。
6. 索引
7. 索引和select
8. 索引和insert,update
1. Statement和PreparedStatement(后续有例子)
1) Statement
特点:statement不会初始化,没有预处理,每次都是从0开始执行SQL。
优点:sql语句直观;对于只执行一次的sql(就是sql语句执行一次后就基本不再用了)存取的时侯, Statement比PreparedStatement 性能高。因为PreparedStatement需要预编译。
缺点:对于需要反复执行的sql语句,则效率远远低于PreparedStatement。
对于oracle,会缓存sql语句,如果以Statement方式多次提交的相同语句sql,其中仅参数不同,oracle也会作为不同的语句缓存起来,可以查看v$sqlarea.
这就是为什么叶飞要发邮件强调的“绑定变量问题”,垃圾sql多了。 呵呵,我们新业务部在这个问题上受到了表扬。
2)PreparedStatement
特点:prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
优点:当sql重复多次执行时,PreparedStatement将会大大降低运行时间,加快访问数据库的速度;参数可以有?表示,方便和易读; 安全和可靠:保证数据的合法性和有效性。较少的占用Oracle的缓存空间。
对于大数据量的操作可以用批处理的方式进行,大大提高了性能。
2. 插入数据:1)Statement插入2)PreparedStatement插入3)PreparedStatement. executeBatch()插入。4)CallableStatement。
注:1) 用CallableStatement存储过程插入数据比较少见,我这个存储过程仅仅传来一个数字参数,来告诉存储过程要插入多少数据,仅仅想看看在写入相同的数据时消耗在网络上时间有多少。
2)对于oracle, 一张表如果并发的insert和update比较频繁时可以设置in..参数。
有一个表t2(id ,name),分别用各种方式单独写入1万条数据。
测试时间:晚12:30。环境 我自己的机器连接19的oracle服务器。
每种情况单独运行3次的平均值。
方式 |
记录数insert into t2(id,name)values(?,?) |
处理时间(s) |
内存消耗(M) |
写入oracle最大数据量/秒 |
数据多时: |
语句insert into t2(id,name)values(?,?) |
|
|
|
Statement插入 |
写入1万条 |
(42.819+43.738+43.233)/3=43.26S |
(0.046+0.046+0.036)/3=0.042M |
231条/每秒 |
PreparedStatement插入 |
写入1万条 |
(8.178+8.364+8.38)/3=8.30S |
0.096+0.096+0.090=0.094M |
1204条/每秒 |
PreparedStatement. executeBatch() |
写入1万条 |
(0.328+0.313+0.312)/3=0.32S |
(0.164+0.165+0.167)/3=0.165M |
31250条/每秒(经验证8万条数据才用时1S) |
CallableStatement |
写入1万条 |
0.812+1.078+0.797=0.90S |
忽略(和我写的存储过程有关) |
11111条/每秒 |
数据少时: |
|
|
|
|
Statement插入 |
写入1条 |
0.078S |
|
|
PreparedStatement插入 |
写入1条 |
0.172s |
|
|
PreparedStatement. executeBatch() |
写入1条 |
0.156s |
|
|
CallableStatement |
写入1条 |
0.203s |
我的存储过程有返回参数,因此网络占据了一部分时间 |
|
|
|
|
|
|
可以看出在数据多时:PreparedStatement. executeBatch()的效率最高,Statement的效率最低。
在数据少时:Statement的效率最高,存储过程的效率最低。说明下,我的存储过程有返回参数,因此网络占据了一部分时间。
在使用PreparedStatement. executeBatch()插入数据时,8万条才用时1S,可见数据量越大性能越高。
3. 读数据
关于读数据可以说是
1)ResultSet.TYPE_FORWARD_ONLY:默认的游标方式 Statement、 PreparedStatement读 和 CallableStatement读(取出游标)
2)ResultSet.TYPE_SCROLL_INSENSITIVE方式读
3) ResultSet.TYPE_SCROLL_SENSITIVE 方式读
方式 |
记录数 |
第一次处理时间(s) |
第一次内存消耗(M) |
第二次处理时间(S) |
第二次内存消耗 |
写入oracle最大数据量/秒 |
TYPE_FORWARD_ONLY Statemen读 |
读100万条 |
103.213+ 118.941 +111.929 |
11.97+11.97+11.97 |
106.384+ 118.255+101.745 |
10.70+10.70+10.70 |
|
TYPE_FORWARD_ONLY PreparedStatement读 |
读100万条 |
90.343+83.767+83.611 |
- Jdbc_和hibernate__修复的_.rar (14 KB)
- 下载次数: 26
- jdbc和数据库.rar (1.4 MB)
- 下载次数: 28
发表评论
-
并发行级锁超2秒报警监控sql
2010-07-20 16:18 1939并发行级锁超2秒报警监控sql -
数据设计规范v
2010-06-22 19:47 0数据设计规范v -
Oracle 有趣排序包括那些
2010-06-20 16:51 1452按拼音排序 select * from table ... -
Oracle sql 性能优化调整
2010-06-20 16:15 1397Oracle sql ... -
Delete、Drop、Truncate的比较(转)
2010-05-31 13:39 1478Delete、Drop、Truncate的比较 关键字: d ... -
Oracle误操作解决方案(转)
2010-05-31 13:35 1394Oracle误操作解决方案 文章分类:数据库 一.误删除数 ... -
一个递归调用的存储过程
2010-04-19 01:51 1850一个递归调用的存储过程 -
oracle index学习总结
2009-12-08 10:44 19634oracle index 1.index需要储存空间 ... -
去掉 powerDesigner 中表设计时的 name和code联动的功能
2009-11-16 17:04 3492去掉 powerDesigner 中表设计时的 name和co ... -
oracle数据库索引未被使用的问题及其解决2007
2009-11-15 01:42 2132一次,在进行WEB页面上进行历史数据文件检查时,发现数据库访问 ... -
RMAN配置及备份与恢复练习
2009-09-27 18:06 16271.创建表空间SQL>create tablespace ... -
误删除数据后怎么立即恢复(不考虑全库备份和利用归档日志)
2009-09-27 18:01 3386要达到删除数据,有以下几种方式都可以:1、delete2、dr ... -
IMP数据到指定的表空间
2009-09-27 12:47 9105IMP数据到指定的表空间 一直以来,我都认为只要指定用户的默 ... -
ORACLE UPDATE 语句语法与性能分析
2009-09-27 09:49 1882为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在 ... -
oracle job 例子
2009-09-22 12:38 3066一、设置初始化参 ... -
oracle 时间加减综合
2009-09-17 11:43 1981加法 select sysdate,add_mon ... -
详细介绍ORACLE sqlplus命令
2009-09-09 16:42 2064一、ORACLE的启动和关闭1、在单机环境下要想启动或关闭OR ... -
AWR介绍与SYSAUX空间关系 SYASAUX表空间满了 系统慢
2009-09-08 09:45 7960AWR介绍与SYSAUX空间关系 2007-11-05 14 ... -
to_char 'NLS_DATE_LANGUAG参数
2009-09-02 18:41 1482select to_char(sysdate, 'Day'), ... -
Oracle oracle 多语言排序
2009-08-17 14:43 1975Oracle9i之前,中文是按照二进制编码进行排序的。在ora ...
相关推荐
JDBC(Java Database Connectivity)和Hibernate是两种不同的Java数据库访问技术,它们各有优缺点,适用于不同的场景。 **相同点:** 1. **中间件角色**:两者都是Java平台上的数据库操作中间件,允许开发者通过...
本文将深入探讨如何使用JDBC和Hibernate来操作Oracle数据库,同时结合提供的标签"源码"和"工具",我们将讨论它们的实现细节和优势。 首先,JDBC是Java语言的标准API,它允许Java应用程序与各种类型的数据库进行通信...
JDBC(Java Database Connectivity)和Hibernate是Java中处理数据库操作的两个重要工具。对于初学者来说,理解和掌握这两个技术对于深入理解Java后端开发至关重要。 JDBC是Java API,它提供了一种标准的方式来连接...
本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...
总的来说,JDBC和Hibernate各有优劣。JDBC提供了更多的灵活性和控制力,适合对性能有特殊需求或者需要精确控制SQL查询的情况;而Hibernate则更适合于需要快速开发、减少编码量并关注业务逻辑的场景。选择哪种方式取...
Java开发人员来说,JDBC(Java Database Connectivity)和Hibernate是两个重要的数据库操作工具。它们各自具有独特的优点和适用场景。 JDBC是Java平台的标准接口,用于连接和操作各种类型的数据库。它提供了直接的...
JDBC由一组Java类和接口组成,使得Java开发者可以编写数据库独立的代码,通过驱动适配器模式来实现与特定数据库的交互。 1. **JDBC基本组件** - **Driver Manager**: 负责管理数据库驱动,加载并注册驱动。 - **...
以上代码展示了如何在Hibernate和JDBC中实现数据分页。通过Hibernate提供的API可以方便快捷地实现分页功能,而JDBC则需要更多的手动处理来构建合适的SQL语句和处理结果集。两种方法各有优势,开发者可以根据实际项目...
本讲解将深入探讨JDBC(Java Database Connectivity)和Hibernate两种不同的技术在处理事务时的方法和特点。 ### 1. JDBC事务 JDBC是Java中用于与各种数据库交互的标准接口。在JDBC中,事务管理主要通过以下步骤...
要将Blob型数据写入Oracle数据库,我们可以使用两种常见的技术:JDBC(Java Database Connectivity)和Hibernate。JDBC是Java与数据库交互的标准API,而Hibernate则是一个ORM(Object-Relational Mapping)框架,...
### JDBC与Hibernate学习笔记 ...JDBC提供了与数据库交互的低级API,而Hibernate则是在JDBC基础上构建的一个高级ORM框架,能够显著减少开发过程中与数据库交互所需的代码量,并提高了开发效率和应用程序的可维护性。
JDBC(Java Database Connectivity)是Java中用于与数据库交互的一组接口和类,而Hibernate是一个对象关系映射(ORM)框架,它将Java对象与数据库表之间的映射过程自动化。 1. **Hibernate的优点**: - **对象化...
本压缩包文件"基于Java 通用数据访问组件,基于mybatis、spring jdbc、hibernate.zip"包含了一些关于如何使用Java中的三种主流数据访问技术——MyBatis、Spring JDBC和Hibernate的资源,这些技术都是Java开发者必备...
本篇将详细介绍如何利用JDBC和Hibernate框架将Blob数据写入Oracle数据库。 首先,Blob数据类型的优点在于其比Long字段有更好的性能,适合存储大量的二进制数据。然而,Blob字段的写入方式与普通字段有所不同,因为...
在IT行业中,数据库操作是应用程序开发的核心部分,而Hibernate和JDBC是两种常见的Java数据库连接技术。本篇文章将深入探讨这两个技术,以及如何进行相关的测试。 首先,JDBC(Java Database Connectivity)是Java...