JDBC中级篇(MYSQL)——在JDBC中如何获得表中的,自增长的字段值

微笑注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接:

package c_increment;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import util.JdbcUtil;

/**
 * 
 * 在JDBC中如何获得表中的,自增长的字段值。
 * 
 * 此例:
 * 		建立在employee和dept表上;
 * 
 * -- 插入数据
 *	INSERT INTO dept(NAME) VALUES('软件开发部');
 *	-- 同时再插入员工
 *	INSERT INTO employee(NAME,deptId) VALUES('张三',1);
 *	-- 如果是java程序插入部门和员工的时候
 *	-- 先插入部门的时候,如何知道自增长的值?	
 *	-- 再插入员工的时候,需要自增长产生的部门id!
 * 
 * @author mzy
 *
 */
public class Demo01 {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		
		try {
			conn = JdbcUtil.getConnection();
			/**
			 * 同时插入一个部门和该部门的员工的数据
			 */
			String deptSql = "insert into dept(name) values(?)";
			String empSql = "insert into employee(name,deptId) values(?,?)";
			/**
			 * 如果获取自增长的生成的值?
			 * 1)设置是否可以返回自增长的值 
			 *    RETURN_GENERATED_KEYS: 可以返回自增长生成值
			 *    NO_GENERATED_KEYS:不能返回自增长的值
			 */
			stmt = conn.prepareStatement(deptSql, Statement.RETURN_GENERATED_KEYS);
			//参数赋值
			stmt.setString(1, "软件维护部");
			//执行插入部门的sql
			stmt.executeUpdate();
			
			/**
			 * 2)获取自增长的值
			 *    注意: 该ResultSet只包含了自增长的字段
			 *    
			 *    为什么是1呢?
			 *    		因为一个表中可以有多个自增长的字段;
			 *    		获得对应的自增长的属性,获取第几个就填几
			 */
			rs = stmt.getGeneratedKeys();
			int deptId = 0;
			if(rs.next()){
				deptId = rs.getInt(1);
			} // 当然还可以通过先插,再查的方式,但是比起这种过于繁琐
			
			// 为什么没关闭,传入参数不相同?导致对象的不同?
			stmt = conn.prepareStatement(empSql);
			stmt.setString(1, "李四");
			stmt.setInt(2, deptId);
			
			//执行插入员工的sql
			stmt.executeUpdate();
			System.out.println("添加成功");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			JdbcUtil.close(rs, stmt, conn);
		}
	}
}

 

posted @ 2018-05-11 08:19  五彩世界  阅读(467)  评论(0编辑  收藏  举报