package com.rlovep.auto; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; import com.rlovep.jdbc.JdbcUtil; /*创建表的sql语句 * create table if not exists ddept( did int primary key auto_increment, deptName varchar(10) not null, index(did) )engine=innodb character set utf8 collate utf8_general_ci auto_increment=1;#设置引擎以及字符集 create table if not exists employ( eid int , empName varchar(10) not null, index(eid), foreign key(eid) references ddept(did) on delete cascade on update cascade#建立外键, )engine=innodb character set utf8 collate utf8_general_ci auto_increment=1;#设置引擎以及字符集 */ /** * * @ClassName: EmpDao * @Description: 测试关联插入和自动增长 * @author peace w_peace@163.com * @date 9 Nov 2015 9:05:12 pm * */ public class EmpDao { //插入ddept表的sql语句 private String sql_insert="insert into ddept(deptName) values(?)"; //查询是否有对应名字的ddept private String sql_qul="select did from ddept where deptName=?"; //插入employ的语句 private String sql_insert_e="insert into employ(empName,eid) values(?,?)"; /** * * @Title: guanlian * @Description:进行关联插入测试,包括获得自动增长的位置 * @param employ * @return:void * @throws * @author peace w_peace@163.com */ public void guanlian(Employ employ){ Connection connection=null; ResultSet rs=null; PreparedStatement statement=null; //保存dpid int depId=0; //获得ddept的名字 String dName=employ.getDept().getDeptName(); try { //获得连接 connection=JdbcUtil.getConnection(); //查询对应名字是否存在 statement=connection.prepareStatement(sql_qul); //给参数填值 statement.setString(1, dName); rs=statement.executeQuery(); //如果名字存在则获得id,不存在则插入ddept表 if(rs.next()){ depId=rs.getInt("did"); } else{ //插入,第一个参数为sql,第二个参数为需要返回自动增长建值 statement=connection.prepareStatement(sql_insert, Statement.RETURN_GENERATED_KEYS); //给参数填值并执行 statement.setString(1, dName); statement.executeUpdate(); //获得自动增长键值 rs=statement.getGeneratedKeys(); if(rs.next()){ //为第一个参数 depId=rs.getInt(1); } } //保存员工,employ statement=connection.prepareStatement(sql_insert_e); //第一个参数为员工名字 statement.setString(1, employ.getEname()); //第二个参数为关联ddept的id statement.setInt(2, depId); //执行 statement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JdbcUtil.close(connection, statement, rs); } } //测试用例 @Test public void testAuto(){ Dept dept=new Dept(); dept.setDeptName("应用开发部"); Employ emp = new Employ(); emp.setEname("王和平"); emp.setDept(dept); // 关联 // 调用dao保存 EmpDao empDao = new EmpDao(); empDao.guanlian(emp); } }