技术标签: java oracle 锁
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中控制表不被其他人修改,但是一定要在合理短的时间内提交或回滚,否则会照成其他操作无法进行。
分享到:
2013-12-21 23:15
浏览 3908
分类:数据库
评论
文章浏览阅读1.8k次,点赞2次,收藏3次。拓扑图先扔在这里,网络老师有如下要求:按照两个公司子网来配置网络拓扑。要求一方有路由汇聚路由器之间网络不浪费先配置静态,后配置动态观察ICMP,ARP,RIP发送流程地址不浪费要达到网络不浪费,我确定在路由器之间使用C类网络地址,且子网掩码为255.255.255.252不明白 的小伙伴我在写细一点,最后一段是的二进制是11111100这保证了前6位是网络号,给主...
文章浏览阅读158次。一、创建枚举类二、在form中调用 $("#timeLimitWhether").ysComboBox({ data: ys.getJson(@Html.Raw(typeof(IsEnum).EnumToDictionaryString())) }); 三、在实体中添加 [NotMapped] public string TimeLimitWhetherName { get { _yscombobox
文章浏览阅读526次。内蒙古大学计算机学院软件学院硕士生导师白翔宇介绍如下:白翔宇,男,1976年1月生,内蒙古呼和浩特人。博士,教授,硕士生导师。学习经历1994-1998 内蒙古大学计算机科学系 计算机及应用专业 本科2001-2004 内蒙古大学计算机学院 计算机应用技术专业 硕士研究生2005-2011 中国科学院计算技术研究所 计算机系统结构专业 博士研究生主要研究方向计算机网络(主要包括但不限于移动...
文章浏览阅读684次。 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4
文章浏览阅读666次。如今腾讯QQ已经发展迅速,在早期,只要用户的QQ在线时间越长,它的QQ等级就会越高。还记得当时很多人都跑网吧挂着QQ2个小时,看着QQ等级从星星变成月亮,再变成太阳,最后变成皇冠,这些都是需要用户经常去使用 QQ,等级才会变高。在这里很多人都不知道最高等级是多少,其实最高等级的QQ可达到9个太阳,或2个皇冠+1个太阳,如果我们每天都正常登录的话,大概需要50年才能完成。但是...
文章浏览阅读5.1k次,点赞2次,收藏12次。可能的疑问“我知道一系列基因的NCBI编号,如果我要查询ensemble编号该如何查询?”“我知道一系列基因的ensemble编号,如果要查询这些的英文简写(symbol),以及其对应的基因组坐标,该如何处理。”“非模式物种如何找到对应的GO注释,Blast2GO自己配置不了,网页又太慢”要做的事情我们要得到非模式物种基因的功能注释该怎么办?有些物种有固定的网站发布基因功能注释以及GOID,例如水稻和小麦水稻:https://rapdb.dna.affrc.go.jp/download/_ensembl查go
文章浏览阅读836次。[NOIP 2017] NOI 的中文意思是A. 中国信息学联赛B. 全国青少年信息学奥林匹克竞赛C. 中国青少年信息学奥林匹克竞赛D. 中国计算机学会答案为 B。[NOIP 2017] 从( )年开始,NOIP 竞赛将不再支持 Pascal 语言。A. 2020B. 2021C. 2022D. 2023答案为 C。..._noip re
文章浏览阅读1.3k次。SUID: 只对二进制程序有效 执行者对于程序需要有x权限 在程序运行过程中,执行者拥有程序拥有者的权限 例如: 普通用户执行passwd命令。 首先查看passwd命令的绝对路径: 查看passwd命令权限: passwd的拥有者是root,且拥有者权限里面本应是x的那一列_suit sgid例子
文章浏览阅读409次。(OK)(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 14 ( 6 nodes) - 建立子路径 & 发送数据包
文章浏览阅读5.6k次,点赞9次,收藏81次。1. 行人检测算法研究综述参考资料:https://zhuanlan.zhihu.com/p/51438953 要解决的问题:找出图像或视频帧中所有的行人,包括位置和大小,一般用矩形框表示。 主要难题: 外观差异大,遮挡问题,背景复杂,检测速度。 行人数据库: INRIA 数据库、Caltech 数据库和 TUD 行人数据库。目标检测现在主要分为以下几个方向:(1)基于运动检测的算..._ivrl rgb/nir dataset
文章浏览阅读1.9k次,点赞2次,收藏7次。Hello world_could not find protobuf (missing: protobuf_include_dir)
文章浏览阅读1k次。@JSONField作用:在字段和方法上1.Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性上2.作用在setter和getter方法上 /** * bean 转json 时会把bean中的name转换为project_name * */ @JSONField(name="project_name") public String getName() { retu._@jsonfield(serializefeatures