這篇文章將為大家詳細(xì)講解有關(guān)使用java如何獲取insert數(shù)據(jù)的自增id,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,網(wǎng)站建設(shè)、成都做網(wǎng)站負(fù)責(zé)任的成都網(wǎng)站制作公司!
Java主要應(yīng)用于:1. web開發(fā);2. Android開發(fā);3. 客戶端開發(fā);4. 網(wǎng)頁開發(fā);5. 企業(yè)級(jí)應(yīng)用開發(fā);6. Java大數(shù)據(jù)開發(fā);7.游戲開發(fā)等。
1、在連接1中向A表插入一條記錄,A表包含一個(gè)auto_increment類型的字段。
2、在連接2中向A表再插入一條記錄。
3、結(jié)果:在連接1中執(zhí)行select LAST_INSERT_ID()得到的結(jié)果和連接2中執(zhí)行select LAST_INSERT_ID()的結(jié)果是不同的;而在兩個(gè)連接中執(zhí)行select max(id)的結(jié)果是相同的。
其實(shí)在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的區(qū)別和這里是類似的。使用SCOPE_IDENTITY()可以獲得插入某個(gè)IDENTITY字段的當(dāng)前會(huì)話的值,而使用IDENT_CURRENT()會(huì)獲得在某個(gè)IDENTITY字段上插入的最大值,而不區(qū)分不同的會(huì)話。
注:使用select last_insert_id()時(shí)要注意,當(dāng)一次插入多條記錄時(shí),只是獲得第一次插入的id值,務(wù)必注意!
當(dāng)然,我們還可以使用另一種更加便捷的方法:在JDBC追加記錄后,使用API獲得新追加記錄的主鍵值。
這個(gè)實(shí)現(xiàn)使用了Statement的getGeneratedKeys方法,
當(dāng)Statement追加了一條記錄后,可以直接調(diào)用getGeneratedKeys方法獲得新追加記錄的key。
測試程序如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class GetGenerateKey { public static void main(String[] args) throws Exception { create(); } public static void create()throws Exception { System.setProperty("jdbc.drivers", "com.MySQL.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", ""); Statement st = conn.createStatement(); String sql = "insert into user (name, birthday, money) values ('beck', '1949-10-01', 60)"; st.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); ResultSet rs = st.getGeneratedKeys(); if (rs.next()) { int id = rs.getInt(1); System.out.println ("生成記錄的key為 :" + id); } st.close(); conn.close(); } }
程序運(yùn)行結(jié)果:
生成記錄的key為 :9
數(shù)據(jù)庫的記錄為:
1 +----+----------+------------+-------+ 2 | id | name | birthday | money | 3 +----+----------+------------+-------+ 4 | 9 | beck | 1949-10-01 | 60 | 5 +----+----------+------------+-------+
總結(jié):這個(gè)API方法提供的好處就是不用重新再執(zhí)行一次查詢獲得新記錄的key值。減少了工作量和服務(wù)器的負(fù)擔(dān)。
注意點(diǎn),在執(zhí)行executeUpdate方法的時(shí)候,要指定返回生成key的選項(xiàng)。
===========================================================
2種方法的java 代碼
Java代碼1
// 用這種方法能得到插入自增的id 很好用 PreparedStatement pstmt = conn.prepareStatement(sql.toString(),PreparedStatement.RETURN_GENERATED_KEYS); for (int i = 0; i < pars.length; i++) { pstmt.setObject(i+1, pars[i]); } pstmt.executeUpdate(); long autoIncKeyFromApi = -1; ResultSet rs = pstmt.getGeneratedKeys(); if (rs.next()) { autoIncKeyFromApi = rs.getInt(1); } return autoIncKeyFromApi;
Java代碼2
qRunner.update(conn,sql.toString(),pars); Long zsysqID = (Long) qRunner.query(conn, "SELECT LAST_INSERT_ID()", new ScalarHandler(1));
關(guān)于使用java如何獲取insert數(shù)據(jù)的自增id就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。