Java连接Oracle数据库存储过程(用户财产变更举例)

JDK: 1.8.0_60

IDE: NetBeans 8.0.2

Oracle: 12c


要求:用户财产变更一个数目,记录下该变更,并且修改用户余额,原子操作。

数据库表创建:

CREATE TABLE "C##ORCL_ATM"."ACCOUNT" 
   (	"ID" VARCHAR2(19 CHAR), 
	"PWD" CHAR(6 CHAR), 
	"SEX" NCHAR(1), 
	"NAME" NVARCHAR2(20), 
	"BALANCE" NUMBER(*,0)
   )
CREATE TABLE "C##ORCL_ATM"."ASSETRECORD" 
   (	"CARDID" VARCHAR2(19 BYTE), 
	"NUM" NUMBER, 
	"TIME" TIMESTAMP (1) WITH LOCAL TIME ZONE
   )
编写存储过程,先对记录表进行插入,如果插入失败,标志返回变量为1;如果成功,修改用户余额数目,类似重置返回变量值。res为0标志执行成功!

CREATE OR REPLACE PROCEDURE CHANGEASSET 
(
  CARDID IN VARCHAR2  
, NUM IN NUMBER  
, RES OUT NUMBER  
) AS 
BEGIN
  insert into assetrecord(cardid,num,time)
  values(cardid,num,sysdate);
  if sql%rowcount=0 then
    rollback;
    res:=1;
    return;
  end if;
  
  update account set balance=balance+num
  where id=cardid;
  if sql%rowcount=0 then
    rollback;
    res:=1;
    return;
  end if;
  
  commit;
  res:=0;
  
END CHANGEASSET;
编写Java连接,进行读取:

public class DBCon {
    /* 连接 */
    private static Connection con = null;

    /* URL */
    private static final String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
    /* 用户名 */
    private static final String dbUser = "******";  //此处更换为登录名
    /* 密码 */
    private static final String dbPwd = "******";  //此处更换为密码


    /* 默认构造函数,实例化连接 */
    public DBCon() throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
    }

    public static Connection getConnection() {
        return con;
    }

    public static void conClose() {
        try {
            con.close();
        } catch (SQLException ex) {
        } finally {
            con = null;
        }
    }
}
</pre><pre name="code" class="java">public class AssetHelper {

    /* 构造函数检查连接是否建立 */
    public AssetHelper() throws Exception {
        if (DBCon.getConnection() == null) {
            new DBCon();
        }
    }

    /* 改变用户财产 */
    public boolean changeAsset(Account account, int num) {
        String sql = "{ call C##ORCL_ATM.changeAsset(?,?,?) }";
        CallableStatement cs = null;
        try {
            cs = DBCon.getConnection().prepareCall(sql);
            cs.setString(1, account.getId());
            cs.setInt(2, num);
            cs.registerOutParameter(3, Types.INTEGER);
            cs.execute();
            return cs.getInt(3) == 0 ? true : false;
        } catch (SQLException ex) {
            return false;
        }
    }
}




1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值