`

Jdbc 和hibernate

阅读更多

Jdbc hibernate

 

一、Jdbcjava连接数据库的基础,无论那种框架,只要用到数据库都需要jdbc,所以掌握了jdbc的细节了才能用好更高级的框架,如hibernate

 

以下总结了jdbc的性能和效率(主要从处理时间和内存消耗上做出比较),希望能给大家带了益处。

1.  StatementPreparedStatement

2.  插入数据(一次1万条)。

3.       读数据。

4.       脏数据的问题。

5.       锁表。

6.       索引

7.       索引和select

8.       索引和insert,update

 

 

1.       StatementPreparedStatement(后续有例子)

1)      Statement

特点:statement不会初始化,没有预处理,每次都是从0开始执行SQL

优点:sql语句直观;对于只执行一次的sql(就是sql语句执行一次后就基本不再用了)存取的时侯, StatementPreparedStatement 性能高。因为PreparedStatement需要预编译。

缺点:对于需要反复执行的sql语句,则效率远远低于PreparedStatement

      对于oracle,会缓存sql语句,如果以Statement方式多次提交的相同语句sql,其中仅参数不同,oracle也会作为不同的语句缓存起来,可以查看v$sqlarea.

这就是为什么叶飞要发邮件强调的“绑定变量问题,垃圾sql多了。 呵呵,我们新业务部在这个问题上受到了表扬。

       2PreparedStatement

特点:prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。

优点:当sql重复多次执行时,PreparedStatement将会大大降低运行时间,加快访问数据库的速度;参数可以有?表示,方便和易读; 安全和可靠:保证数据的合法性和有效性。较少的占用Oracle的缓存空间。

           对于大数据量的操作可以用批处理的方式进行,大大提高了性能。

 

2.       插入数据:1Statement插入2PreparedStatement插入3PreparedStatement. executeBatch()插入。4CallableStatement

注:1) CallableStatement存储过程插入数据比较少见,我这个存储过程仅仅传来一个数字参数,来告诉存储过程要插入多少数据,仅仅想看看在写入相同的数据时消耗在网络上时间有多少。

2)对于oracle, 一张表如果并发的insertupdate比较频繁时可以设置in..参数。

有一个表t2(id ,name),分别用各种方式单独写入1万条数据。

测试时间:晚1230。环境 我自己的机器连接19oracle服务器。

每种情况单独运行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.       读数据

关于读数据可以说是

1ResultSet.TYPE_FORWARD_ONLY:默认的游标方式 Statement PreparedStatement CallableStatement读(取出游标)

2ResultSet.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的区别

    jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和hibernate的区别jdbc和...

    oracle分别使用jdbc和hibernate的例子

    本文将深入探讨如何使用JDBC和Hibernate来操作Oracle数据库,同时结合提供的标签"源码"和"工具",我们将讨论它们的实现细节和优势。 首先,JDBC是Java语言的标准API,它允许Java应用程序与各种类型的数据库进行通信...

    jdbc和hibernate学习内容

    JDBC(Java Database Connectivity)和Hibernate是Java中处理数据库操作的两个重要工具。对于初学者来说,理解和掌握这两个技术对于深入理解Java后端开发至关重要。 JDBC是Java API,它提供了一种标准的方式来连接...

    spring分别与jdbc和hibernate结合的事务控制--案例

    本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...

    jdbc和hibernate总结

    JDBC由一组Java类和接口组成,使得Java开发者可以编写数据库独立的代码,通过驱动适配器模式来实现与特定数据库的交互。 1. **JDBC基本组件** - **Driver Manager**: 负责管理数据库驱动,加载并注册驱动。 - **...

    JDBC和hibernate事务的详解

    本讲解将深入探讨JDBC(Java Database Connectivity)和Hibernate两种不同的技术在处理事务时的方法和特点。 ### 1. JDBC事务 JDBC是Java中用于与各种数据库交互的标准接口。在JDBC中,事务管理主要通过以下步骤...

    JDBC与Hibernate的比较

    JDBC与Hibernate的比较JDBC与Hibernate的比较

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    要将Blob型数据写入Oracle数据库,我们可以使用两种常见的技术:JDBC(Java Database Connectivity)和Hibernate。JDBC是Java与数据库交互的标准API,而Hibernate则是一个ORM(Object-Relational Mapping)框架,...

    在JDBC,hibernate中实现分页

    讲解了Hibernate中实现分页的方法,详细讲解了JDBC+SQL 2005如何实现假分页,并用struts2标签,在页面上显示。

    JDBC与Hibernate区别

    当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。 相同点: ◆两者都是JAVA的数据库操作中间件。 ◆两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 ◆两者都可以对数据库的更新...

    jdbc与hibernate的优缺点比较(转载的精髓).pdf

    JDBC(Java Database Connectivity)是Java中用于与数据库交互的一组接口和类,而Hibernate是一个对象关系映射(ORM)框架,它将Java对象与数据库表之间的映射过程自动化。 1. **Hibernate的优点**: - **对象化...

    基于Java 通用数据访问组件,基于mybatis、spring jdbc、hibernate.zip

    本压缩包文件"基于Java 通用数据访问组件,基于mybatis、spring jdbc、hibernate.zip"包含了一些关于如何使用Java中的三种主流数据访问技术——MyBatis、Spring JDBC和Hibernate的资源,这些技术都是Java开发者必备...

    Hibernate和JDBC比对

    在Java开发中,数据库操作是不可或缺的一部分,Hibernate和JDBC作为两种常用的数据库访问技术,它们各有优势和适用场景。理解它们的区别有助于我们根据项目需求选择合适的技术。 首先,JDBC(Java Database ...

    JDBC+Hibernate将Blob数据写入Oracle

    本篇将详细介绍如何利用JDBC和Hibernate框架将Blob数据写入Oracle数据库。 首先,Blob数据类型的优点在于其比Long字段有更好的性能,适合存储大量的二进制数据。然而,Blob字段的写入方式与普通字段有所不同,因为...

    hibernate和jdbc测试

    在IT行业中,数据库操作是应用程序开发的核心部分,而Hibernate和JDBC是两种常见的Java数据库连接技术。本篇文章将深入探讨这两个技术,以及如何进行相关的测试。 首先,JDBC(Java Database Connectivity)是Java...

    JDBC模拟hibernate

    JDBC模拟hibernate,能过反射把数据重新装载进实体类

Global site tag (gtag.js) - Google Analytics