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

		}
	}

}
相关推荐
架构师沉默9 小时前
别又牛逼了!AI 写 Java 代码真的行吗?
java·后端·架构
DolphinDB10 小时前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL10 小时前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
DBA小马哥14 小时前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
后端AI实验室14 小时前
我把一个生产Bug的排查过程,交给AI处理——20分钟后我关掉了它
java·ai
凉年技术16 小时前
Java 实现企业微信扫码登录
java·企业微信
爱可生开源社区16 小时前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
狂奔小菜鸡17 小时前
Day41 | Java中的锁分类
java·后端·java ee
hooknum17 小时前
学习记录:基于JWT简单实现登录认证功能-demo
java
程序员Terry17 小时前
同事被深拷贝坑了3小时,我教他原型模式的正确打开方式
java·设计模式