1、问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考)

答: Oracle有自己的锁机制。就算你开100条线,它还是一条一条删除。不能同时删除多项的。
     对于大量数据更新,Oracle有建议一些优化措施。
     (1) 首先是把auto-commit给关闭。因为你每删一条数据,oracle就要自动执行一次commit。commit是需要资源的。所以如果你手动设置为每删数据1000条,执行一次commit. 那你就可以节省资源了。
     (2) 充分利用batch update。如果不用batch,每个delete命令都需要从网络上传送到oracle。1万个删除命令,要有1万次传送。如果将100个删除命令绑在一起送去Oracle执行。那就只要传送100次就可以了。大大缩短所需时间和网络资源。
     以上这些建议,都可以在Oracle参考里查到。

2、问:oracle中什么操作需要commit才能保存到数据库?(以下答案来自网络,仅供参考)

答:平时用的时候Commit、Rollback 主要用在DML(数据操纵语言) - Insert、Update、Delete 这些语句上,可以设置保存点,然后依次提交,同样也可以rollback。单独commit,是把之前的数据改动都一次提交。正常的关闭,exit是可以自动提交的,可以不用commit,直接关闭窗口,属于强制关闭,关闭之前需要commit。

3、问:jdbc 批处理插入数据库 每100条提交一次,有余数时如何解决?(以下答案来自网络,仅供参考)

答:

String sql="insert into t1(id) values (?)";
Connection con=null;
PreparedStatement ps=null;

con= dao.getConnection();
ps=con.prepareStatement(sql);

ps.addBatch();


if(i%100==0)//每100条提交一次
{
ps.executeBatch();
con.commit();
ps.clearBatch();
}
改成
if(i%100==0||i==(list.size()-1)){
ps.executeBatch();
con.commit();
ps.clearBatch();
}

4、通过测试得到的:(来自网络,仅供参考)

(1)、批处理要conn.setAutoCommit(false)(默认会自动提交,不能达到批处理的目的,速度极慢!)。
     (2)、pstmt.executeBatch();    //PreparedStatement pstmt
                conn.commit();
        要提交,数据库才会有数据。
     (3)、避免内存溢出,应每x(如:万)条提交一次数据。
     (4)、可用“数据库名.表名”的方法来访问数据库表
        这样,则在写JdbcUtil的DB_CONNECTION = "jdbc:mysql://localhost:3306/"时,
        可不具体到数据库,方便跨数据库的数据操作。
     (5)、Statement和PrepareStatement不仅可以操作DDL,添加删除表和数据库的sql都可以操作,用execute(String sql)方法。

5、conn.setAutoCommit(true)和(false)的区别:(来自网络,仅供参考)

JDBC中的这个参数

true:sql命令的提交(commit)由驱动程序负责
false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法

通过jdbc对数据库进行操作的时候,conn.commit(),可以将修改的数据提交,但是前提必须是数据库的autocommit属性为false,否则你进行一次操作后,数据库会自行commit。
6、为什么采用批处理的方式后,没有写conn.commit()也能提交?
答:这样可能是程序结束conn关闭导致的提交 conn.setAutoCommit(true)是控制是否每条SQL执行完后自动提交。

7、(一)
1.java程序循环执行10000条sql语句,不commit,共耗时13.395s;sql*plus可以查询的到;重启sql*plus

依然可以查询得到。
2.在sql*plus中执行删除表中内容 delete from "TAB_orderDetail"(没有commit);然后再在此次的

sql*plus中查询,记录数为0;但用java查询数据并没有被删除,还能查得到。但重启sql*plus,记录数仍

为10000。这都是由于在sql*plus中执行删除表中内容时没有commit造成的。
3.在java中执行删除表中内容 delete from "TAB_orderDetail"(没有commit),在java中再查询结果为0

;在sql*plus中查询结果也为0.(说明此时已经真正删除)
(二)
1、java程序循环执行10000条插入sql语句,不commit,共耗时7.652s。java程序循环执行10000条sql语句

,commit,共耗时7.595s。改为批处理后,批处理插入100000条记录,用时52.867s;批处理插入10000条记录,用时5.337s。

 

用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理的更多相关文章

  1. JDBC连接Oracle数据库的问题

    场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题. 问题1:jdbc连接不上Ubuntu Oracle服务器? 后来发现这个问题的原因是由于连接字符串写错了,修 ...

  2. 【方法】如何限定IP访问Oracle数据库

    [方法]如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知 ...

  3. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  4. .net(C#)访问Oracle数据库的几种免安装组件的对比

    Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, OD ...

  5. jdbc连接oracle数据库

    /*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...

  6. .net(C#)访问Oracle数据库的几种免安装组件的对比(转)

    原文地址 [内容为转载,个人推荐还是用官方的组件,推荐使用 Oracle.DataAccess.dll ] .net(C#)编程过程中,使用到了以下三种免安装的Oracle访问组件,能够不安装Orac ...

  7. 运行于64操作系统上的C#客户端通过WCF访问Oracle数据库不兼容问题

    运行平台: Windows 7  64位操作系统 运行环境: IIS 7 编程语言:C# 数据库: 32位的Oracle 10g 运行原因:64位操作系统C#客户端程序通过WCF访问ORACLE数据库 ...

  8. 在Eclipse中使用JDBC访问MySQL数据库的配置方法

    在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...

  9. ODP.NET 之访问 Oracle 数据库

    ODP.NET 之访问 Oracle 数据库 要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Da ...

随机推荐

  1. Oracle bug 使用max或min函数into到一个char类型报字符缓冲区太小的错误

    这个BUG出现会报错如下: selectto_char(max(RENEWAL_DATE)) intoM_YEAR_MONTH fromt_renewal_schedule; ORA-06502: P ...

  2. java优化占用内存的方法(一)

    java做的系统给人的印象是什么?占 内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点.其实从理论上来讲java做的系统并不比其他语言开发出来的 系统更占用内存, ...

  3. Java字符串之性能优化

    基础类型转化成String 在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值.在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值 ...

  4. Xcode常用设置

    1.设置主题和字体大小 2.设置显示代码行号

  5. 明晰三种常见存储技术:DAS、SAN和NAS

    随着企业网络应用的时间和应用的数据量的加大,企业已经感觉到存储容量和性能落后与网络的应用发展需求,特别是流媒体企业,在这种应用条件下满足用户的存储需求的技术应用诞生,DAS.NAS和SAN三种存储技术 ...

  6. 使用Web代理实现Ajax跨域

    目前的工作项目分为前端和后台,双方事先约定接口,之后独立开发.后台每天开发完后在测试服务器上部署,前端连接测试服务器进行数据交互.前端和后台分开的好处是代码不用混在一个工程里一起build,互不干涉. ...

  7. 认识FiddlerScript

    FiddlerScript 是Fiddler 的一项非常强大的功能,它允许你增强Fiddler UI,添加新的特性,修改请求与响应内容等等... 1.编写FiddlerScript FiddlerSc ...

  8. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  9. ANDROID_MARS学习笔记_S01_009Relative_LAYOUT例子

    1. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android ...

  10. 172. Factorial Trailing Zeroes

    题目: Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...