获取自动生成主键
package cn.itcast.demo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import cn.itcast.utils.JdbcUtils; public class demo4 { /* 获取自动生成的主键,仅在插入语句有效! 应用场景举例:夫妻关系管理系统,男方表插入语句时, 需要获取自动生成的id,用于更新女方表的外键列! mysql -uroot -proot set character_set_client=gb2312; set character_set_results=gb2312; use day15; create table test( id int primary key auto_increment, name varchar(40) not null )character set utf8 collate utf8_general_ci; show tables; */ @Test public void getGeneratedKeys(){ //SQL更新模板代码(sql_u) Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql = "insert into test(name) values(?)"; st = conn.prepareStatement(sql); st.setString(1, "林黛玉"); st.executeUpdate(); //关键代码: rs=st.getGeneratedKeys(); if (rs.next()) { //只能使用列索引,不能使用列名!? 找不到名为id的列! System.out.println(rs.getInt("id")); } } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtils.release(conn, st, rs); } } }
package cn.itcast.demo; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Types; import org.junit.Test; import cn.itcast.exception.DaoException; import cn.itcast.utils.JdbcUtils; public class demo5 { /* 调用存储过程 对于金融领域特别重要!因为表结构不公开,所以也不能用hibernate 具体细节会在oracle四天学习中讲解! 1,在mysql中先定义一个存储过程(类似于函数)! 功能是在输入字符串前加入字符串'pre_eminent:'后输出 delimiter ^ create procedure demo5(IN inputParam VARCHAR(255),INOUT inoutParam VARCHAR(255)) BEGIN SELECT CONCAT('pre_eminent:',inputParam) into inoutParam; END^ delimiter ; 2,drop procedure demo5删除存储过程*/ @Test public void sqlProcedure(){ //SQL调用存储过程模板代码(sql_procedure) Connection conn = null; CallableStatement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); /*调用存储过程的关键一句 demo5是上面存储过程的名称(类似函数名)! * call是SQL关键字!括号里面是参数! * 第1个参数是输入,第2个参数是输出!*/ String sql = "{call demo5(?,?)}"; st = conn.prepareCall(sql); //替换掉占位符并注册返回值类型!注意第2个是sqlType st.setString(1, "nice to meet you!"); //注册返回值类型,可以找java.sql.Types的常量! st.registerOutParameter(2, Types.VARCHAR); //执行这条完整的sql语句 st.execute(); //输出占位符2的值,即是得到的inoutParam的值! System.out.println(st.getString(2)); } catch (Exception e) { throw new DaoException(e); } finally { JdbcUtils.release(conn, st, rs); } } }