数据库事务 oracle java

===oracle 表sql

sql 复制代码
  CREATE TABLE "SMALL19RAIN"."R_TABLE_STU" 
   (	"NAME" VARCHAR2(200 BYTE), 
	"AGE" NUMBER, 
	"STU_ID" NUMBER NOT NULL ENABLE, 
	"DATARAIN" VARCHAR2(200 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SMALLRAIN19TABLESPACE" ;

======java文件

java 复制代码
package org.rain.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * 数据库事务
 */
public class SmallRainDBTranscation {

	public static void main(String[] args) {

		Connection smallrainConn = null;
		Statement smallrainStmt = null;
		Savepoint smallRainSavaPoint = null;
		PreparedStatement smallrainEditDB = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			smallrainConn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "smallrain123456789",
					"Xiaoyu123456789");
			//下面一行设置为true,第一个for循环会提交
			smallrainConn.setAutoCommit(false);

			smallrainStmt = smallrainConn.createStatement();
			int smallrainInsertId = 30;
			for (; smallrainInsertId < 50; smallrainInsertId++) {

				smallrainEditDB = smallrainConn
						.prepareStatement("INSERT INTO r_table_stu(STU_ID,NAME, DATARAIN) VALUES(?,?,?) ");
				smallrainEditDB.setObject(1, smallrainInsertId);
				smallrainEditDB.setObject(2, "data中文" + smallrainInsertId);
				smallrainEditDB.setObject(3, "数据data中文" + smallrainInsertId);
				smallrainEditDB.executeUpdate();
			}

			int smallrainInsertErrorId = 3;
			for (; smallrainInsertErrorId < 6; smallrainInsertErrorId++) {

				smallrainEditDB = smallrainConn
						.prepareStatement("INSERT INTO r_table_stu(STU_ID,NAME, DATARAIN) VALUES(?,?,?) ");
				smallrainEditDB.setObject(1, "数字类型为字符串报错");
				smallrainEditDB.setObject(2, "error中文" + smallrainInsertId);
				smallrainEditDB.setObject(3, "errordata中文" + smallrainInsertId);
				smallrainEditDB.executeUpdate();
			}

		} catch (Exception e) {
			try {
				smallrainConn.rollback();
				System.out.println("事务回滚");
			} catch (Exception ein) {

				e.printStackTrace();
			}
		} finally {
			if (null != smallrainEditDB) {
				try {
					smallrainEditDB.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (null != smallrainStmt) {
				try {
					smallrainStmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (null != smallrainConn) {
				try {

					smallrainConn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}
	}

}
相关推荐
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz6 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
来杯@Java7 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记8 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥8 小时前
匿名函数 lambda + 高阶函数
java·python·算法
東雪木8 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r8 小时前
Java调用链MCP分析工具
java·python·ai编程
噜噜噜阿鲁~9 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
春生野草9 小时前
反射、Tomcat执行
java·开发语言
键盘上的猫头鹰9 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql