一个事务中,输入员工信息,插入表中

package day03;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import day01.DBUtil;

/**
 * 要求用户输入一个部门信息:部门名,部门所在地
 * 然后再要求用户为该部门输入三个员工
 * 每个员工插入name,job,sal,depino字段
 * 完成后,dept表中应当有一条记新录,emp表中应当由三条新纪录,
 * 要求再一个事务中进行
 * 
 * 要求输入部门名:IT
 * 请输入部门虽在地:BEIJING
 * 请输入第1个员工信息:
 * jack,CLERK,5000
 * 请输入第2个员工信息
 * johnson,CLERK,5000
 * 请输入第三个员工信息
 * will,CLERK,8000
 * 保存完毕
 * @author Ward
 *
 */

public class demo4 {

    public static void main(String[] args) {
        try {Scanner scanner=new Scanner(System.in);
            System.out.println("请输入部门信息:");
            System.out.println("请输入部门名称:");            
            String dname=scanner.nextLine();
                
            System.out.println("请输入部门所在地");    
            String Loc=scanner.nextLine();
            System.out.println("请输入要输入的员工个数");
            int sum=Integer.parseInt(scanner.nextLine());
            
            List<String> empInfos=new ArrayList<String>();
            for(int i=1;i<=sum;i++) {
                System.out.println("请输入第"+i+"个员工信息");
                String empInfo=scanner.nextLine();
                empInfos.add(empInfo);
            }
                                                        
            Connection conn= DBUtil.getConnection();
            conn.setAutoCommit(false);
            String deptsql="INSERT INTO dept"
                    + "(depino,dname,Loc) "
                    + "VALUES "
                    + "(seq_dept_id.NEXTVAL,?,?)";
            
            PreparedStatement deptPs=conn.prepareStatement(deptsql,new String[] {"depino"});
                deptPs.setString(1, dname);
                deptPs.setString(2, Loc);
                int n=deptPs.executeUpdate();
                if(n>0) {//获取部门ID
                    ResultSet rs=deptPs.getGeneratedKeys();
                    rs.next();
                    int depino=rs.getInt(1);
                    /**
                     * Statement使用完毕后,关闭释放资源,
                     * 但是需要注意,若使用Statement获取快乐一个
                     * 结果集,若将Statement关闭,那么该结果集也会自动关闭
                     * 所以应当遍历完结果集后关闭Statement,PreparedStatement也一样
                     */
                    deptPs.close();
                    String empSql="INSERT INTO emp "
                            + "(empno,name,job,salary,depino) "
                            + "VALUES "
                            + "(seq_emp_id.NEXTVAL,?,?,?,?)";
                    PreparedStatement empPs=conn.prepareStatement(empSql);
                    for(String empInfo :empInfos) {
                        String[] infos=empInfo.split(",");
                        empPs.setString(1, infos[0]);
                        empPs.setString(2, infos[1]);
                        empPs.setInt(3,Integer.parseInt(infos[2]));
                        empPs.setInt(4, depino);
                        empPs.executeUpdate();
                    }
                    System.out.println("保存完毕");
                    conn.commit();
                    
                }else {
                    System.out.println("失败");
                }
            
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.closeConnection();
        }
        
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值