10bet网址
MySQL连接器/ J 8.0开发者指南
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 0.7 mb
PDF (A4)- 0.7 mb
HTML下载(TGZ)- 141.0 kb
HTML下载(邮政编码)- 160.5 kb


MySQL连接器/ J 8.0开发者指南/JDBC的概念通过JDBC /检索AUTO_INCREMENT列值

7.4检索AUTO_INCREMENT列值通过JDBC

getGeneratedKeys ()是首选方法使用如果您需要检索AUTO_INCREMENT通过JDBC键和;这是第一个例子说明如下。第二个例子展示了如何使用一个标准的检索相同的值选择LAST_INSERT_ID ()查询。最后一个例子展示了如何更新的结果集可以检索AUTO_INCREMENT当使用价值insertRow ()方法。

示例7.8连接器/ J:检索AUTO_INCREMENT列值使用Statement.getGeneratedKeys ()

声明支撑=零;ResultSet rs =零;尝试{/ / / /创建一个声明实例,我们可以使用/ /假设你有一个“正常”的结果集/ /连接康涅狄格州的一个MySQL数据库已经= / /可用支撑conn.createStatement ();/ / / /问题表的DDL查询这个例子/ /支撑。executeUpdate(“删除表如果存在autoIncTutorial”);支撑。executeUpdate(“创建表autoIncTutorial (“+”priKey INT NOT NULL AUTO_INCREMENT,“+”dataField VARCHAR(64),主键(priKey)) ");/ / / /插入一行,将生成一个自动增量/ /“priKey”领域的关键/ /支撑。executeUpdate(“插入autoIncTutorial (dataField)“+”值(“我可以得到汽车增量字段吗?”)”,Statement.RETURN_GENERATED_KEYS);/ / / /的例子使用Statement.getGeneratedKeys() / /检索一个自动递增的值/ /价值/ / int autoIncKeyFromApi = 1;rs = stmt.getGeneratedKeys (); if (rs.next()) { autoIncKeyFromApi = rs.getInt(1); } else { // throw an exception from here } System.out.println("Key returned from getGeneratedKeys():" + autoIncKeyFromApi); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }

示例7.9连接器/ J:检索AUTO_INCREMENT列值使用选择LAST_INSERT_ID ()

声明支撑=零;ResultSet rs =零;尝试{/ / / /创建一个声明实例,我们可以使用/ /“正常”的结果集。支撑= conn.createStatement ();/ / / /问题表的DDL查询这个例子/ /支撑。executeUpdate(“删除表如果存在autoIncTutorial”);支撑。executeUpdate(“创建表autoIncTutorial (“+”priKey INT NOT NULL AUTO_INCREMENT,“+”dataField VARCHAR(64),主键(priKey)) ");/ / / /插入一行,将生成一个自动增量/ /“priKey”领域的关键/ /支撑。executeUpdate(“插入autoIncTutorial (dataField)“+”值(“我可以得到汽车增量字段吗?”)”);/ / / /使用MySQL LAST_INSERT_ID() / /函数来做同样的事情作为getGeneratedKeys () / / int autoIncKeyFromFunc = 1; rs = stmt.executeQuery("SELECT LAST_INSERT_ID()"); if (rs.next()) { autoIncKeyFromFunc = rs.getInt(1); } else { // throw an exception from here } System.out.println("Key returned from " + "'SELECT LAST_INSERT_ID()': " + autoIncKeyFromFunc); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }

示例7.10连接器/ J:检索AUTO_INCREMENT列值在可更新的结果集

声明支撑=零;ResultSet rs =零;尝试{/ / / /创建一个声明实例,我们可以使用/ /“正常”的结果集,以及一个可更新的/ / 1,假设你有一个连接的康涅狄格州/ / MySQL数据库可用= / /支撑conn.createStatement (java.sql.ResultSet。TYPE_FORWARD_ONLY java.sql.ResultSet.CONCUR_UPDATABLE);/ / / /问题表的DDL查询这个例子/ /支撑。executeUpdate(“删除表如果存在autoIncTutorial”);支撑。executeUpdate(“创建表autoIncTutorial (“+”priKey INT NOT NULL AUTO_INCREMENT,“+”dataField VARCHAR(64),主键(priKey)) ");/ / / /的例子检索一个汽车增量键/ /从一个可更新的结果集/ / rs =支撑。executeQuery(“选择priKey dataField”+“从autoIncTutorial”);rs.moveToInsertRow ();rs.updateString (“dataField”、“汽车增量吗?”);rs.insertRow (); // // the driver adds rows at the end // rs.last(); // // We should now be on the row we just inserted // int autoIncKeyFromRS = rs.getInt("priKey"); System.out.println("Key returned for inserted row: " + autoIncKeyFromRS); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }

运行前面的示例代码将生成以下输出:

主要从getGeneratedKeys():返回1键返回选择LAST_INSERT_ID(): 1键返回插入的行:1

有时,它可以是复杂的使用选择LAST_INSERT_ID ()查询,该函数的值是局限于一个连接。因此,如果其他查询发生在相同的连接,该值覆盖。另一方面,getGeneratedKeys ()作用域的方法声明可以使用实例,因此即使其他查询发生在相同的连接,但不是相同的声明实例。