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。

 

最新文章

  1. jQuery 自带的动画效果
  2. android 简单打jar包
  3. 快手4.0 (KSCAD)
  4. PHP isset() 检测变量是否设置
  5. 使用ASP.NET web API创建REST服务(二)
  6. tslib 移植问题与解决方法
  7. Eclipse的快捷键及常用设置
  8. C++学习之路—继承与派生(二):派生类的构造函数与析构函数
  9. Servlet(七)生成验证码
  10. 主席树(可持久化线段树) 静态第k大
  11. Javaweb 第1天 HTML和CSS课程
  12. (转)Uploadify 3.2 参数属性、事件、方法函数详解
  13. 使用localhost可以访问,但使用本地ip+端口号无法访问
  14. Spring Security 入门(1-6-1)Spring Security - 配置文件解析和访问请求处理
  15. requests+selenium==requestium模块介绍
  16. SQL server 使用 内联结(INNER JOIN) 联结多个表 (以及过滤条件 WHERE, AND使用区别)
  17. k8s nodeport下访问请求未被分发到所有node的排错(转)
  18. Angular官方教程采坑
  19. python使用多线程
  20. springboot笔记1(转载于puresmile)

热门文章

  1. 使用Yeoman搭建 AngularJS 应用 (6) —— 让我们搭建一个网页应用
  2. SQL SERVER数据导入
  3. ASP.NET MVC 数据分页思想及解决方案代码
  4. SQL Server CONVERT() 函数
  5. POJ3273Monthly Expense(二分)
  6. [Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置
  7. 【形式化方法:VDM++系列】4.VDM实战1——铁路费用计算
  8. NPOI.dll学习
  9. 使用Data Annotations进行手动数据验证
  10. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】08-基本运算