java监测oracle是否锁表_java调用Oracle的锁表命令

在项目应用中,在执行某些操作时不希望别人对表进行操作,这时会用到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中控制表不被其他人修改,但是一定要在合理短的时间内提交或回滚,否则会照成其他操作无法进行。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值