JDBC中對PreparedStatement的理解對資料庫自動產生的主索引值的擷取,
PreparedStatement 介面
public interface PreparedStatement
extends Statement
表示先行編譯的 SQL 陳述式的對象。
SQL 陳述式被先行編譯並儲存在 PreparedStatement
對象中。然後可以使用此對象多次高效地執行該語句。(JDK API 1.6中的說明)
該介面可以對SQL語句進行先行編譯,可以防止sql注入問題,同時在執行多次相同的sql語句時,因為預先編譯,執行時不需要再重複編譯,所以效率比Statement高
(Statement每次執行sql語句時,都會進行編譯然後在執行)
——————————————————————————————————————————————————————————————————————————————
//插入語句,第二個參數返回一個int類型的主索引值PreparedStatement pstmt=conn.prepareStatement("insert into tb_user values(null,?,?)",Statement.RETURN_GENERATED_KEYS);
//在語句執行之後返回一個主索引值的結果集ResultSet
ResultSet rs=ps.getGeneratedKeys();
在Statement中也有類似的方法,在execute(String sql,int autoGeneratedKeys)等其他方法中可以使用
例如:
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;/** * 對獲得資料庫自動產生的主索引值進行擷取 * @author dingshuangen * */public class getKey {public static void main(String[] args) {Connection conn=DbUtil.getConnection();PreparedStatement ps=null;PreparedStatement ps_h=null;ResultSet rs=null;try {//插入語句,第二個參數返回一個int類型的主索引值ps=conn.prepareStatement("insert into tb_user values(null,?,?)",Statement.RETURN_GENERATED_KEYS);ps.setString(1, "金剛葫蘆娃");ps.setString(2, "小葫蘆");//執行語句ps.execute();//獲得返回的主索引值,傳回型別為ResultSet結果集rs=ps.getGeneratedKeys();rs.next();//擷取該主索引值int key=rs.getInt(1);System.out.println("+++主鍵+++"+key+"++++++");ps_h=conn.prepareStatement("insert into tb_hobby values(null,?,?)");//迴圈插入多條資料String[] hobby= {"吃飯","睡覺","打豆豆"};for (String h : hobby) {ps_h.setInt(1, key);ps_h.setString(2, h);ps_h.execute();}System.out.println("執行成功");}catch(Exception e) {e.printStackTrace();}finally {//關閉所有資源DbUtil.close(rs);DbUtil.close(ps);DbUtil.close(ps_h);DbUtil.close(conn);}}}
執行的結果如下:
+++主鍵+++7++++++執行成功
對應資料庫表格式資料:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。