`

java调用Oracle的锁表命令

    博客分类:
  • JAVA
阅读更多

     在项目应用中,在执行某些操作时不希望别人对表进行操作,这时会用到oracle中的锁表命令。下明是我写的小测试实例,帮组大家实现java中控制oracle锁表操作。

      首先创建连接数据库的方法,在提示部分打入断点,执行debus方式启动的那个。

package com.itown.item;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectOracle {
	/** Oracle数据库连接URL */
	private final static String DB_URL = "jdbc:oracle:thin:@localhost:1521:demo";

	/** Oracle数据库连接驱动 */
	private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";

	/** 数据库用户名 */
	private final static String DB_USERNAME = "hniqp";

	/** 数据库密码 */
	private final static String DB_PASSWORD = "hniqp";

	/**
	 * 获取数据库连接
	 * 
	 * @return
	 */
	public Connection getConnection() {
		/** 声明Connection连接对象 */
		Connection conn = null;
		try {
			/** 使用Class.forName()方法自动创建这个驱动程序的实例且自动调用DriverManager来注册它 */
			Class.forName(DB_DRIVER);
			/** 通过DriverManager的getConnection()方法获取数据库连接 */
			conn = DriverManager
					.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return conn;
	}

	/**
	 * 关闭数据库连接
	 * 
	 * @param connect
	 */
	public void closeConnection(Connection conn) {
		try {
			if (conn != null) {
				/** 判断当前连接连接对象如果没有被关闭就调用关闭方法 */
				if (!conn.isClosed()) {
					conn.close();
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void main(String[] args) throws SQLException {
		ConnectOracle con = new ConnectOracle();
		Connection connect = con.getConnection();
		//设置手动提交事务
		connect.setAutoCommit(false);
		Statement stmt = connect.createStatement();
		//锁表
		stmt.addBatch("lock table t_symbol_code_fee in exclusive mode");
		//此处打上断点后,执行另一个类,你会发现,执行成功后并没有更改记录,因为表已经被锁定。只有提交事务后,TestOracle中执行的修改才能生效。
		stmt.executeBatch();
		//提交后自动解锁,回滚时也会自动解锁
		connect.commit();

		stmt.close();
		connect.close();
	}
}

  

 

         实现另外一个类,这样才能认为是两个客户端在同时操作一张表。

package com.itown.item;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class TestOracle {
	public static void main(String[] args) throws SQLException {
		ConnectOracle con = new ConnectOracle();
		Connection connect = con.getConnection();
		Statement stmt = connect.createStatement();

		stmt.executeQuery("update t_symbol_code_fee fee set fee.unit = 2");
		
		stmt.close();
		connect.close();
	}
}

     执行之后会发现,更新并没有执行,而且也没有报错。这是因为第一个类已经锁住了表,而且还没有提交或回滚,这时其他客户端只能查询该表,不能对该表进行其他操作。当我们把ConnectOracle 类执行到过commit后,你会发现数据库中的记录这时被更改了。

      综上所诉,我们可以在java中控制表不被其他人修改,但是一定要在合理短的时间内提交或回滚,否则会照成其他操作无法进行。

      不知道您是否明白!呵呵!

分享到:
评论

相关推荐

    oracle常用命令-一完整的电子商务网案例

    电子商务网站案例下载:(数据库脚本,java调用示例,.net(c#)调用示例 说明:一个电子商务网站的oracle数据库完整设计,包括: Oracle常用命令1(数据库、表空间) Oracle常用命令2(用户、角色管理) Oracle常用...

    java调用shell脚本执行sqlldr与存储过程

    因为我在linux环境下执行shell脚本时sqlldr命令和sqlplus命令是正常执行的,没有任何问题,但是在java代码中调用脚本时却报错,所有排除了其他原因,只可能是环境变量的问题, 于是我把oracle的所有环境变量直接复制...

    sqoop2 java API从oracle导数据到HDFS开发总结新

    sqoop2 java API从oracle导数据到HDFS开发总结 有了这个文档,会为你节省很多时间,一些我踩坑趟路的时间;但是不代表你什么都不知道的前提就能把demo运行起来 。 建议操作顺序:sqoop官方环境搭建文档看一遍,然后...

    Oracle导入导出命令及数据库备份

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份... oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。 SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。

    MAC_oracle_客户端文件_sqlplus_sqlldr_sqluldr264

    java控制台调用oracle命令的注意问题的说明文档 最终能执行sqlplus,imp,exp,impdb,expdb,sqlldr,sqluldr2等命令, 包含设置中的一些问题,踩过的坑 ├── Mac配置oracle客户端说明文件.docx ├── instantclient-...

    21天学通Oracle

    第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 ...第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) 391

    Oracle11g从入门到精通2

    从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用开发基础,并通过两个完整案例来介绍基于Java开发包和Oracle数据库...

    oraclejdbc驱动

    ojdbc5dms.jar (2,429,777 字节)— 与 ojdbc5.jar 一样,除了包含支持 DMS 和有限的 java.util.logging 调用的工具。 ojdbc5dms_g.jar (3,101,875 字节)— 与 ojdbc5_g.jar 一样,除了包含支持 DMS 的工具。 ...

    Oracle11g从入门到精通

    从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用开发基础,并通过两个完整案例来介绍基于Java开发包和Oracle数据库...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题31.jdbc调用存储过程.mp4 │ Java面试题32.简单说一下你对jdbc的理解.mp4 │ Java面试题33.写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java...

    java开源包1

    brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准...

    6年javaEE开发的Word资料合集

    详细解释的 Java面试题 最小函数依赖 在数据库中实现base64编码和解码 java servlet总结 java的时间操作 画Web流程图的一点心得 深入Java核心 Java内存分配原理精讲 JAVA调用存储过程详解 经典SQL语句大全 使用...

    JAVA上百实例源码以及开源项目

     [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP ...

    JAVA上百实例源码以及开源项目源代码

     [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP ...

    oracle实验报告

    在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何数据到新表中去。另外,还可以复制一个表的部分列定义或部分列定义及其数据。 三、 Oracle数据库数据查询 1、单表查询 2、多...

    java面试800题

    Q0033 在Oracle数据库中,给定一个表,其中一列有索引,现在用这个列作为查询条件,因为用到了索引,速度一定会快吗? 答案是否定的,比如在这个列中使用‘%sdfd%’来进行模糊查询 Q0034 给定了一些创建数据库试图...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    11 管理表 目标 11-2 储存用户数据 11-3 Oracle 数据类型 11-5 ROWID 格式 11-8 行的结构 11-10 创建一张表 11-11 创建临时表 11-13 创建表:指南 11-14 修改储存参数 11-15 手工分配片 11-16 重构非分区表 11-17 ...

Global site tag (gtag.js) - Google Analytics