数据库事务 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();
				}
			}

		}
	}

}
相关推荐
好学且牛逼的马5 分钟前
MyBatis-Plus的深度解析
java
苏纪云6 分钟前
数据结构<C++>——数组
java·数据结构·c++·数组·动态数组
NocoBase20 分钟前
8 人团队如何效率拉满?——创联云的开发方法论
数据库·低代码·开源
典则28 分钟前
STM32FreeRtos入门(五)——同步互斥与通信
java·jvm·stm32
你不是我我28 分钟前
【Java 开发日记】我们来讲一讲阻塞队列及其应用
java·开发语言
互联网中的一颗神经元30 分钟前
小白python入门 - 9. Python 列表2 ——从基础操作到高级应用
java·开发语言·python
kgduu33 分钟前
go-ethereum core之交易索引txIndexer
服务器·数据库·golang
大厂码农老A34 分钟前
我带的外包兄弟放弃大厂转正,薪资翻倍入职字节
java·后端·面试
摇滚侠41 分钟前
全面掌握 PostgreSQL 关系型数据库,PostgreSQL 介绍,笔记02
数据库·笔记·postgresql
摇滚侠42 分钟前
Spring Boot3零基础教程,生命周期监听,自定义监听器,笔记59
java·开发语言·spring boot·笔记