利用PreparedStatement自動返回主鍵
阿新 • • 發佈:2019-01-11
package day03; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import day01.DBUtil2; /** * PreparedStatement 支援一個方法 * 可以在執行插入操作後獲取該條語句在資料庫表中產生的記錄中 * 每個欄位的值, 我們可以獲取該主鍵作為外來鍵插入 * */ public class JDBCDemo3 { public static void main(String[] args) { try { Connection conn = DBUtil2.getConnection(); String sql = "INSERT INTO dept_wq VALUES " + "(dept_seq.nextval,?,?)"; /** * 建立PreparedStatement時,可以使用Connection的過載方法 * 第二個引數要求我們傳入一個字串陣列,用來指定當通過ps操作後, * 該記錄在表中想獲取的值所在的欄位名 */ PreparedStatement ps = conn.prepareStatement(sql,new String[]{"deptno","dname"}); ps.setString(1, "ORACLE"); ps.setString(2, "NANJING"); int deptno = -1; if(ps.executeUpdate() > 0 ){ /** * 獲取剛剛插入進去的記錄中關注的那幾列的值 */ ResultSet rs = ps.getGeneratedKeys(); if(rs.next()){ //獲取deptno的值(int)--現在只關注此列 deptno = rs.getInt(1);//此處建議使用數字,getInt("deptno")對於不同的資料庫版本可能不支援 System.out.println("該部門編號:"+deptno); //獲取dname的值(String) String dname = rs.getString(2); System.out.println("該部門名稱:"+dname); } rs.close();//釋放資源 } //將deptno作為外來鍵插入到user表作為外來鍵 if(deptno > 0){//說明獲取到了該值 String userSql = "INSERT INTO user_wq (id,name,deptno) VALUES " + "(user_seq.nextval,?,?)"; ps = conn.prepareStatement(userSql); ps.setString(1, "王慶"); ps.setInt(2, deptno); if(ps.executeUpdate() > 0){ System.out.println("插入user成功"); }else{ System.out.println("插入user失敗"); } } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil2.closeConnection(); } } }
測試結果如下:
該部門編號:66
該部門名稱:ORACLE
插入user成功