T_Persons表是一个表示“人”的表。

T_Dogs表是一个表示“狗狗”的表,在T_Dogs表中有一个外键MasterId指向T_Persons表的主键Id。


package com.rk.db.f_auto_increment;

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

import com.rk.db.utils.JDBCUtil;

public class Demo01
{
	public static void main(String[] args)
	{
		Connection conn = null;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;
		ResultSet rs = null;
		try
		{
			String sql1 = "insert into T_Persons(UserName,Pwd) values(?,?)";
			String sql2 = "insert into T_Dogs(dName,MasterId) values(?,?)";
			//获得连接
			conn = JDBCUtil.getConnection();
			
			// 1、需要指定返回自增长标记
			pstmt1 = conn.prepareStatement(sql1,Statement.RETURN_GENERATED_KEYS);
			pstmt1.setString(1, "小红");
			pstmt1.setString(2, "password");			
			pstmt1.executeUpdate();
			
			// 2、得到返回的自增长字段
			int masterId = -1;
			rs = pstmt1.getGeneratedKeys();			
			if(rs.next())
			{
				masterId = rs.getInt(1);
			}
			
			// 3、使用返回的自增长字段
			pstmt2 = conn.prepareStatement(sql2);
			pstmt2.setString(1, "旺财");
			pstmt2.setInt(2, masterId);
			pstmt2.executeUpdate();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			JDBCUtil.closeQuietly(pstmt1);
			JDBCUtil.closeQuietly(pstmt2);
			JDBCUtil.closeQuietly(conn);
		}
	}
}