`

使用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_...

    spring自带的jdbcTemplate查询、插入预编译使用

    本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 首先,`jdbcTemplate`的核心功能是通过预编译的SQL语句(PreparedStatement)来执行数据库操作。预编译SQL可以有效...

    Excel数据转MySQL插入语句的Python程序

    在批量插入数据时,考虑到性能,可能需要使用批处理操作,或者利用pymysql的 executemany() 方法。 这个Python程序能够帮助你快速、高效地将Excel数据导入到MySQL数据库,实现数据的自动化迁移,这对于数据管理和...

    .net实现oracle数据库中获取新插入数据的id的方法

    在插入数据到test表(包含id和name两列)时,可以使用序列的`nextval`属性来获取下一个ID值,如下所示: ```sql INSERT INTO test(id, name) VALUES(SEQ_test.nextval, 'name1'); ``` 插入完成后,要获取新插入行...

    用Sqlite存储数据,实现增删改查

    向表中插入数据使用`INSERT INTO`语句: ```sql INSERT INTO Mobilephonenumber (number) VALUES ('1234567890'); ``` 这将向`Mobilephonenumber`表中插入一个新记录。 ### 四、查询数据(查) 查询数据使用`...

    Python实现读取TXT文件数据并存进内置数据库SQLite3的方法

    本文将详细介绍如何使用Python读取TXT文件中的数据,并将其存储到SQLite3数据库中,同时也会涉及数据库的基本操作,如创建表、插入数据以及查询数据。 首先,我们需要导入`sqlite3`模块,这是Python标准库的一部分...

    PHP程序设计-3期(KC016) 5.2.3新增数据常见问题.docx

    在处理新增数据时,可能会遇到一些常见的问题,特别是当尝试插入新记录并尝试获取主键值或者绑定数据时。以下是两个在PHP使用PDO时可能遇到的问题及其解决方案。 问题1:新增数据后,用`lastInsertId()`获取不到主...

    3-第三章:关系数据语言(3).pdf

    数据操纵语言还包括了表的更新操作,例如INSERT语句用于向表中插入新的数据行,UPDATE语句用于修改表中的已有数据,DELETE语句用于从表中删除数据。在执行这些操作时,合理使用事务控制语句,如COMMIT和ROLLBACK,...

    delphi 动态创建access数据表

    在Delphi中,我们可以使用ADO组件来与Access数据库进行交互,包括动态创建新的数据表。以下是对这一主题的详细说明: 1. ADO组件介绍: - **TADOConnection**:这是连接到数据库的主要组件,负责建立和管理与...

    PHP程序设计-3期(KC016) 5.1.4修改数据常见问题.docx

    常见的做法是通过查询语句找到该记录,然后根据返回的结果集获取主键。如果没有获取主键,直接尝试更新数据,系统通常无法确定要更新哪条记录,这会导致更新操作失败或者更新了错误的记录。 解决方法:在修改数据...

    PHP 取得刚刚添加记录的ID.rar

    当我们使用`mysqli_query()`插入数据并希望获取新生成的ID时,可以调用`mysqli_insert_id()`函数。例如: ```php $conn = new mysqli('localhost', 'username', 'password', 'database'); if ($conn-&gt;connect_...

    sqlite使用

    向表中插入数据使用`INSERT INTO`语句: ```sql INSERT INTO students (name, age, major) VALUES ('张三', 20, '计算机科学'); ``` ### 4. 查询数据 查询数据使用`SELECT`语句,可以结合`WHERE`子句进行条件筛选...

    c# Dapper,添加,修改,删除,查询,事务,存储过程,含数据库

    - `BulkInsert`: Dapper扩展方法,用于批量插入数据,提高了数据插入的效率。 2. **Dapper的修改方法**: - `Update`: 更新数据时,通常会根据主键或其他唯一标识来定位需要更新的记录。 - `UpdateAsync`: 异步...

    Python中的Sqlite.pdf

    通过以上步骤,我们可以看到使用Python中的SQLite3模块可以轻松地实现常见的数据库操作,包括创建表、插入数据、查询数据、更新数据和删除数据等。这对于开发小型应用程序或者需要轻量级数据库解决方案的场景非常...

    五种提高 SQL 性能的方法.doc

    4. **批量处理**:当需要插入大量数据时,使用BULK INSERT或批处理(批量提交多条INSERT语句)比单条插入更高效。这样可以减少与数据库的交互次数,降低系统开销。 5. **数据库设计优化**:良好的数据库设计是性能...

    VC数据库操作类库(基本操作)

    5. 查询操作:虽然题目中没有特别提及查询功能,但一个完整的类库可能还会提供`SelectRecord()`方法,用于执行SELECT语句并返回结果集,这可能涉及到了数据绑定和数据游标的操作。 在`DBOpera.cpp`文件中,上述类的...

    iOS sqlite

    例如,创建表、插入数据、查询数据等操作可以转化为Swift代码: ```swift let dbQueue = FMDatabaseQueue(path: "path/to/your/database.sqlite") dbQueue.inTransaction { db in do { try db.execute("CREATE ...

    数据库面试题.docx

    - **提高插入性能**: 当使用自增主键时,新记录可以连续地插入到数据页的末尾,这样可以减少因数据页分裂导致的磁盘I/O操作。 - **简化索引管理**: 自增主键有助于保持索引结构的紧凑性,减少了索引重组的需求。 ...

    jdbc调用存储过程实现增删改查

    在Oracle中,创建一个接受参数的存储过程,用于插入新记录。然后,在Java中,创建`CallableStatement`,设置参数(如插入的字段值),执行存储过程。 ### 删除数据 类似地,创建一个删除数据的存储过程,可能需要...

    ASP+SQL Server之图象数据处理

    对于图片数据,我们可以使用`AppendChunk`方法将二进制数据添加到`Parameter`对象,以便执行SQL插入语句。 以下是一个简化的处理图片上传的ASP示例代码: ```vbscript Response.Buffer = True ImageSize = Request...

Global site tag (gtag.js) - Google Analytics