java 程序锁oracle表_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java 程序锁oracle表

java 程序锁oracle表

 2013/12/22 1:08:58  点滴积累  程序员俱乐部  我要评论(0)
  • 摘要:在项目应用中,在执行某些操作时不希望别人对表进行操作,这时会用到oracle中的锁表命令。下明是我写的小测试实例,帮组大家实现java中控制oracle锁表操作。首先创建连接数据库的方法,在提示部分打入断点,执行debus方式启动的那个。importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement
  • 标签:程序 ORA Java Oracle
在项目应用中,在执行某些操作时不希望别人对表进行操作,这时会用到oracle中的锁表命令。下明是我写的小测试实例,帮组大家实现java中控制oracle锁表操作。
首先创建连接数据库的方法,在提示部分打入断点,执行debus方式启动的那个。
class="java" name="code">
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();
    }
}


实现另外一个类,这样才能认为是两个客户端在同时操作一张表。
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中控制表不被其他人修改,但是一定要在合理短的时间内提交或回滚,否则会照成其他操作无法进行。
发表评论
用户名: 匿名