`
wuzhengxuan
  • 浏览: 22746 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC往Oracle插入数据获得主键

阅读更多

JDBC插入数据库获得主键的方式,目前我总结出两种

 

1.适用于自动增长列的数据库(如sql-server,mysql)

/**

* 插入数据获得主键

* @param annex

* @return

*/

public long save2(Annex annex){

long annexId = 0;

//获得连接

Connection con = ProxoolManager.getConnection();

String insertSQL = "insert into annex values (?,?,sysdate,?,?,?)";

PreparedStatement pstmt = null;

ResultSet rs = null;

try{

pstmt = con.prepareStatement(insertSQL,Statement.RETURN_GENERATED_KEYS) ;

pstmt.setInt(1, 1);

pstmt.setString(2, annex.getAnnexName());

pstmt.setString(3, annex.getAnnexFormat());

pstmt.setString(4, DefineUtil.getFilePath()+File.separator+annex.getFileName()+"."+annex.getAnnexFormat());

pstmt.setInt(5, 1);

//将数据保存到数据库

pstmt.executeUpdate();

//获得主键

rs=pstmt.getGeneratedKeys(); 

if(rs.next()){

System.out.println(rs.getString(1));

annexId = rs.getLong(1);

}

}catch(SQLException ex){

ex.printStackTrace();

}

return annexId;

}

 

    如果用ORACLE数据库使用上所述方法,获得的将是ROW_ID,并不是我们真正想要的主键值

 

2.适合Oracle数据库的方法

/**

* 插入数据获得主键

* @param annex

* @return

*/

public long save3(Annex annex){

long annexId = 0;

//获得连接

Connection con = ProxoolManager.getConnection();

String insertSQL = "BEGIN insert into annex (ANNEX_NAME,ANNEX_CREATTIME,ANNEX_FORMAT,ANNEX_PATH,ADVUSER_ID) values (?,sysdate,?,?,?) returning ANNEX_ID into ?; END;";

try {

CallableStatement call = con.prepareCall(insertSQL);

call.setString(1, annex.getAnnexName());

call.setString(2, annex.getAnnexFormat());

call.setString(3, DefineUtil.getFilePath()+File.separator+annex.getFileName()+"."+annex.getAnnexFormat());

call.setInt(4, 1);

call.registerOutParameter(5, OracleTypes.NUMBER);

call.execute();

annexId = call.getInt(5);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return annexId;

}

 

    CallableStatement 主要用来执行存储过程,可获得存储过程的输出值

    既然是存储过程,SQL语句中,一定不能缺少BEGIN END,(一定不能少)

    call.registerOutParameter(5, OracleTypes.NUMBER);     设置输出标引位置,以及输出类型

0
0
分享到:
评论

相关推荐

    jdbc 插入记录并返回自增主键值

    当我们需要向MySQL数据库插入新记录并获取自增主键的值时,JDBC提供了相应的功能来实现这一需求。本篇文章将详细讲解如何通过JDBC在Java中执行插入操作并获取自增主键。 首先,确保你已经在项目中引入了MySQL的JDBC...

    使用JDBC+Oracle完成一个JSP的留言管理程序

    通过以上步骤,我们可以构建一个功能完备的JSP留言管理程序,利用JDBC和Oracle数据库实现数据的存取。在实际项目中,还可以考虑引入MVC框架(如Spring MVC)来提升代码的可维护性和可扩展性。同时,对用户体验、响应...

    JDBC连接Oracle数据库

    在Java编码部分,我们看到一个名为JDBCOracle的类,其中包含main方法,这是执行程序的入口点。在这个方法中,定义了数据库的URL(jdbc:oracle:thin格式,包括服务器IP、端口号和SID)、用户名和密码。然后,通过`...

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...

    Oracle JDBC书籍 教程

    表空间的概念也在这里得到解释,它是Oracle存储数据的逻辑单位,有助于管理数据库的存储空间。 查询部分是教程的重点,从单表查询到多表查询,包括内连接、外连接和自连接,全面讲解如何通过SQL获取所需信息。子...

    JDBC操纵Oracle数据库中的BLOB字段

    本文将深入探讨如何使用Java Database Connectivity (JDBC) API来操作Oracle数据库中的BLOB字段,包括创建表、插入和读取BLOB数据的方法。 #### 创建包含BLOB字段的表 在Oracle数据库中创建一个包含BLOB字段的表...

    mysql-oracle数据同步

    在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值动态生成Oracle的序列号。 实现这个过程的具体步骤可能包括: 1. 查询MySQL的最新主键值,例如:`SELECT AUTO_...

    JDBC(oracle)java测试题.pdf

    以上是Oracle数据库操作和JDBC相关的一些基础概念和使用技巧,涵盖了数据处理、查询、排序、插入、删除以及Java编程接口等方面的知识点。在实际开发中,理解并熟练掌握这些内容对于进行数据库操作和编写Java程序至关...

    JDBC(oracle)java测试题.docx

    11. **插入数据**:在Oracle中,向表中插入数据时,必须提供主键列的值。选项A只提供了主键,选项B缺少主键,选项D将整型主键误写为字符串,只有选项C是正确的。 12. **Java JDBC接口**:在Java中,`Statement`、`...

    OSWorkflow基于JDBC(oracle)存储实现的表结构

    OSWorkflow基于JDBC(oracle)存储实现的表结构 OSWorkflow基于JDBC(oracle)存储实现的表结构是指使用Oracle数据库存储OSWorkflow工作流引擎的表结构设计。该设计主要包括两个表:OS_WFENTRY和OS_CURRENTSTEP。 OS_...

    java中xml文件的处理及oracle中xmltype的插入和读取.pdf

    在 Oracle 数据库中,我们可以使用 `INSERT` 语句将 XML 数据插入到 `resumes2` 表中: ```sql INSERT INTO resumes2 (employee_id, resume) VALUES (1, XMLType('<resume><name>John</name><age>30</age></resume>...

    初学SpringCloud连接Oracle数据库

    `JpaRepository`接口提供了CRUD操作,你可以直接调用它的方法来查询、插入、更新或删除数据。 为了在SpringCloud服务中使用这个数据库连接,你可能还需要配置Ribbon或Feign客户端,以在微服务间进行数据交互。...

    Java使用JDBC实现Oracle用户认证的方法详解

    "Java使用JDBC实现Oracle用户认证的方法详解" Java语言是目前最流行的编程语言之一,广泛应用于Web开发、Android应用开发、桌面应用开发等领域。Java语言的强大之处在于它可以与数据库进行交互,实现数据的存储和...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    总结来说,要在MyBatis-Plus中利用Oracle Sequence生成主键,需完成数据库Sequence的创建、项目配置(包括JDBC驱动、数据源、全局配置)、实体类注解以及数据库操作。这样的设置确保了在插入新记录时,MyBatis-Plus...

    使用JDBC4.0处理Oracle中BLOB类型的数据

    在Java的JDBC4.0版本中,处理Oracle数据库中的BLOB(Binary Large Object)类型数据是一项常见的任务,尤其在存储和检索大容量的二进制数据,如图像、音频或视频文件时。本篇文章将深入讲解如何使用JDBC4.0与Oracle...

    图片存入Oracle中,用clob和blob两种方式

    - **插入数据**:通过SQL插入语句,将转换后的图片数据插入到相应的字段中。 - **保存图片**:提交事务,确保数据保存到数据库中。 4. **从Oracle中读取图片**: - **查询数据**:使用SQL查询语句获取`CLOB`或`...

    Oracle课程综合性实验

    - 数据操作:通过JDBC插入、查询和修改数据,需要掌握`executeQuery()`、`executeUpdate()`方法,以及结果集的处理。 3. **信息管理系统设计**: - 系统架构:实验设计了两个主要模块——前台POS销售系统和后台...

    Excel转Oracle

    3. 导入数据:有多种方法可将Excel数据导入Oracle,例如: - 使用SQL*Loader:这是一种批量数据加载工具,通过控制文件定义数据格式,并将Excel文件转换为Oracle可以识别的格式。 - PL/SQL程序:编写PL/SQL存储...

    SQLSERVER导入ORACLE数据库

    - **表结构和约束:** 在导入数据前,需要先在SQL Server中创建与Oracle类似的表结构,包括字段、主键、外键和索引。 - **事务处理:** 为了确保数据一致性,可以使用事务进行数据迁移,一旦发生错误,可以回滚整个...

Global site tag (gtag.js) - Google Analytics