`

使用execute返回新插入数据的主键

阅读更多
这个是我的通用DAO类,更新和查询都是用的公共的pstmt.execute.需要返回新插入数据的主键时,sql语句的格式应该是"insert into  userinfo(name,pwd)values(?,?)select @@identity";然后通过pstmt.getGeneratedKeys()便可获取新插入数据的主键。业务DAO类使用res.get(1)获取主键。这个问题今天困扰了我老长时间。
引用
import org.syh.oa.system.db.DBConnection;

public class BaseDao {
private static Connection con;
private static PreparedStatement pstmt;

//通用业务操作
public static void execute(String sql, List parms) {
try {
con = DBConnection.getDBCon();
pstmt = con.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
if (parms != null) {
setParam(pstmt, parms);
}
pstmt.execute();

} catch (Exception e) {
e.printStackTrace();
}

}
//返回插入的主键
public static ResultSet getKeys() throws SQLException{
return pstmt.getGeneratedKeys();
}

//返回结果集
public static ResultSet getRes() {
ResultSet result = null;
try {

result = pstmt.getResultSet();

} catch (SQLException e) {
e.printStackTrace();
}
return result;
}

//返回影响行数
public static int getUpdateCount() {
int no = 0;
try {
no = pstmt.getUpdateCount();
} catch (Exception e) {
e.printStackTrace();
}
return no;
}

//循环给参数赋值
public static void setParam(PreparedStatement pstmt, List parms) {
try {
for (int i = 0; i < parms.size(); i++) {
Object obj = (Object) parms.get(i);
pstmt.setObject(i + 1, obj);
}
} catch (Exception e) {
e.printStackTrace();
}

}
    //关闭资源
public static void closeAll() {
try {
if (con != null) {
con.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}

}

}
分享到:
评论

相关推荐

    Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import pymysql db = pymysql.connect(**db_...

    精通SQL 结构化查询语言详解

    15.3.3 使用EXECUTE语句调用存储过程  15.3.4 使用CREATE FUNCTION创建函数  15.3.5 使用Enterprise Manager创建存储过程和函数 15.3.6 修改和删除存储过程和函数  15.4 Oracle中的流控制语句  15.4.1 ...

    精通SQL--结构化查询语言详解

    15.3.3 使用execute语句调用存储过程 310 15.3.4 使用create function创建函数 312 15.3.5 使用enterprise manager创建存储过程和函数 315 15.3.6 修改和删除存储过程和函数 317 15.4 oracle中的流控制语句 319 ...

    数据库基础

    §3.3.6 将表移动到新的数据段或新的表空间 102 §3.3.7 手工分配表的存储空间 104 §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 ...

    Oracle8i_9i数据库基础

    §3.3.6 将表移动到新的数据段或新的表空间 102 §3.3.7 手工分配表的存储空间 104 §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包。  EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具的使用。  自定义角色 ...

    JAVA WEB框架,java网站一个模块只用写一个文件

    那么在构造Hyberbin的时候需要给出需要插入的szdw数据放在szdw的POJO类中去,还要给出szdw表的主键是id. 现有 Szdw szdw;里面有所有关于要插入这个表的教师的相关信息 构造Hyberbin:Hyberbin hyberbin=new Hyberbin...

    C#编程经验技巧宝典

    100 &lt;br&gt;0158 如何将二进制数转换为十六进制数 100 &lt;br&gt;0159 如何实现0~9之间随机整数 101 &lt;br&gt;0160 如何实现0~1之间随机数 101 &lt;br&gt;0161 如何返回数字的绝对值 101 &lt;br&gt;5.2 控件数据处理...

    jdbc基础和参考

    execute:返回boolean类型的值,代表是否有结果集返回(如果执行select操作,是有ResultSet的,返回值为true) executeUpdate:返回int类型的值,代表的是,操作执行完成后,受影响的数据库的行计数(针对于insert,...

    Spring API

    11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall...

    Spring中文帮助文档

    11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall...

    经典全面的SQL语句大全

    A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only C: select * into table2 from table  5、说明:  删除新表:drop table...

    经典SQL语句大全

    A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table...

    数据库操作语句大全(sql)

    A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table...

    sql经典语句一部分

    A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table...

Global site tag (gtag.js) - Google Analytics