測試用的數據庫腳本:
java
以上5種方法均可以實現功能,如下是5種方法的優缺點彙總,我的推薦性能要求通常的業務採用第一種方法,性能要求很是高業務採用第五種方法。
sql
方法數據庫 |
簡介數組 |
優勢安全 |
缺點併發 |
方法一oracle |
先用seq.nextval取出值,而後用轉入變量的方式插入性能 |
代碼簡單直觀,使用的人也最多測試 |
須要兩次sql交互,性能不佳spa |
方法二 |
先用seq.nextval直接插入記錄,再用seq.currval取出新插入的值 |
能夠在插入記錄後返回sequence,適合於數據插入業務邏輯很差改造的業務代碼 |
須要兩次sql交互,性能不佳,而且容易產生併發安全問題 |
方法三 |
用pl/sql塊的returning into語法,用CallableStatement對象設置輸出參數取到新插入的值 |
只要一次sql交互,性能較好 |
須要採用pl/sql語法,代碼不直觀,使用較少 |
方法四 |
設置PreparedStatement須要返回新值的字段名,而後用getGeneratedKeys取得新插入的值 |
性能良好,只要一次sql交互 |
只有Oracle10g才支持,使用較少 |
方法五 |
returning into語法,用OraclePreparedStatement對象設置輸出參數,再用getReturnResultSet取得新增入的值 |
性能最好,由於只要一次sql交互,oracle9i也支持 |
只能使用Oracle jdbc特有的OraclePreparedStatement對象 |