java操作oracle程序,高手帮看下这程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java操作oracle程序,高手帮看下这程序?相关的知识,希望对你有一定的参考价值。

import java.sql.*;
public class TestBatch

private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
private static final String USER = "scott";
private static final String PASSWORD = "scott";

public TestBatch()


public static void main(String[] args)
try
Class.forName(DRIVER);

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
Statement stmt = conn.createStatement();
boolean flag = conn.getAutoCommit();//帮忙解释下这句程序是什么意思?
try
String sql1 = "update emp set sal=2444 where empno=7902";
String sql2 = "update emp set sal=2445 where empno=7934";
stmt.addBatch(sql1);
stmt.addBatch(sql2);
conn.setAutoCommit(false);//这句程序是什么意思?
stmt.executeBatch();
conn.commit();
System.out.print("更新成功");
catch (SQLException ex)
conn.rollback();
System.out.println("更新失败,已全部回滚");
ex.printStackTrace();
finally
conn.setAutoCommit(flag);//这句程序是什么意思?
stmt.close();
conn.close();


catch (ClassNotFoundException ex)

catch (SQLException ex)





1.高手帮忙看下这程序错误在哪里了?
2.帮我看下程序注释部分那句程序是什么意思?
3.能帮我把这程序改对嘛?
运行时报下面这个错误:
更新失败,已全部回滚
java.sql.BatchUpdateException: 批处理中出现错误: ORA-04098: 触发器 'SCOTT.RESTRICT_SAL' 无效且未通过重新验证

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:415)
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:455)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:3957)
at com.jd.TestBatch.main(TestBatch.java:26)

1 和你程序代码无关,错误是因为emp 定义了触发器,需要按照触发器的规则去更新数据才可以成功执行,否则就报出以上错误,具体要看你数据库里emp表上定义的触发器到底是怎么写的/
2 第1句是判断当前的conn的自动提交类型是true还是flase,如果true,则执行一句自动commit一次;第2行注释是强行将conn设置为false,就是手动提交,这样保证执行的事务性,在方法最后自己写commit,要么都成功,要么都失败,这也是代码开发时很好的习惯。
3 需要根据你的触发器规则去update数据,不是任意的数据都可以更新,有时候还可能要更新别的表数据这个触发器才能绕过追问

明白了,谢谢了啊。你在打开我又发了个程序,你再帮我看下我那个程序,就是有重新提了个问题。你帮忙看下我那个问题。

追答

问题在哪。。。

追问

就是还是我这个名字,我又刚添加了个问题,名字叫:高手帮忙看下,这java程序是什么意思?
你不能再搜索我这个用户下面的所有提问问题吗?或者你直接在百度知道里搜索:高手帮忙看下,这java程序是什么意思。这个就出来我的问题了。

参考技术A boolean flag = conn.getAutoCommit();//帮忙解释下这句程序是什么意思?
查看当前是否设置了默认事务模式-自动提交,即执行一个sql(增删改)提交一次;

conn.setAutoCommit(false);//这句程序是什么意思?
设置了新的事务提交方式,就是不自动提交了。用户自己控制事务,所以之后才有 conn.commit();语句。

conn.setAutoCommit(flag);//这句程序是什么意思?
这句写在finally里面。就是,在这段代码执行完以后,将事务设置回执行这段代码之前的方式。之前是自动提交的,就设置回自动提交,用户控制的就设置回用户控制。

至于你更新数据失败的原因,触发器SCOTT.RESTRICT_SAL定义于表emp.sal上,你可查看下该触发器逻辑是否正确,与上述代码执行无关。
参考技术B conn.setAutoCommit(false); 设置它为非自动提交,我们老师是这样解释的。 参考技术C 那句意思是是否自动提交更新。

另外错误的原因是:数据库中定义的触发器 'SCOTT.RESTRICT_SAL' 有编译错误

以上是关于java操作oracle程序,高手帮看下这程序?的主要内容,如果未能解决你的问题,请参考以下文章

请帮看下java代码

微信小程序的.wxml文件提示错误,有大佬能帮看下怎么改吗

PartitionMagic 8.0报错启动不了,专家帮看下

mysql zerofill 不补零是怎么回事儿?高手帮看一下!!!

高手帮看一下搜索代码,搜索数字及字母时没问题,输入中文搜索就是乱码。

C语言 四则运算 各位C语言高手帮忙做下这题!!谢谢谢谢谢谢