JDBC获取新增记录的自增主键

来源:互联网 发布:电子罗盘软件下载 编辑:程序博客网 时间:2024/06/06 10:45

常常在使用Hibernate、iBatis时候,当插入一条数据的时候,实体Bean的原空主键就 赋上新值了,但是用原生sql怎么解决呢,或者说框架实现这个的原理呢



参见测试类,执行以下就知道了。

----------------------------------------------------------

package cn.hl.demo.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JdbcTest {public static void main(String[] args) {// 执行插入获取自增主键insertWithParperedSQL();insertWithStaticSQL();}// 驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中public static final String DBDRIVER = "com.mysql.jdbc.Driver";// 连接地址是由各个数据库生产商单独提供的,所以需要单独记住public static final String DBURL = "jdbc:mysql://localhost:3306/test";// 连接数据库的用户名public static final String DBUSER = "root";// 连接数据库的密码public static final String DBPASS = "root";// 预定义SQL模式,获取新增记录的主键public static void insertWithParperedSQL() {Connection conn = null;try {// 获取连接conn = getConnection();// 定义执行sql语句String sql = "insert into test_user(name,age) values(?,?)";//PreparedStatement ps = conn.prepareStatement(sql,Statement.NO_GENERATED_KEYS);ps.setString(1, "laozhang");ps.setInt(2, 19);ps.executeUpdate();// 检索由于执行此 Statement  对象而创建的所有自动生成的键ResultSet rs = ps.getGeneratedKeys();if (rs.next()) {Long id = rs.getLong(1);System.out.println("-----预定义SQL模式-----id = " + id);}} catch (SQLException e) {e.printStackTrace();} finally {closeConnection(conn);}}// 静态SQL模式,获取新增记录的主键public static void insertWithStaticSQL() {Connection conn = null;try {// 获取连接conn = getConnection();// 定义执行sql语句String sql = "insert into test_user(name,age) values('zahnsan',22)";//PreparedStatement ps = conn.prepareStatement(sql,Statement.NO_GENERATED_KEYS);ps.executeUpdate();// 检索由于执行此 Statement  对象而创建的所有自动生成的键ResultSet rs = ps.getGeneratedKeys();if (rs.next()) {Long id = rs.getLong(1);System.out.println("-----预定义SQL模式-----id = " + id);}} catch (SQLException e) {e.printStackTrace();} finally {closeConnection(conn);}}// 获取Connectionpublic static Connection getConnection() {// 表示数据库的连接对象Connection conn = null;try {// 1、使用CLASS 类加载驱动程序Class.forName(DBDRIVER);// 2、连接数据库conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}// 3、关闭数据库// con.close();return conn;}// 关闭Connectionpublic static void closeConnection(Connection conn) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}


0 0
原创粉丝点击