oracle插入数据语句主键,JDBC Insert语句插入Oracle数据库返回数据主键

表结构:

create table test(

id varchar2(32) primary key,

name varchar2(32)

);import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Test {

/**

* 使用Statement.RETURN_GENERATED_KEYS 指定返回生成主键

*/

public static void main(String[] args) {

PreparedStatement pst = null;

ResultSet rs = null;

Connection conn = ConnectionManager.getConnection();

String sql = "insert into test(id,name) values(?,?)";

try {

//String generatedColumns[] = { "ID" }; //获得指定ID

pst = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // 指定返回生成的主键

pst.setString(1, "123x");

pst.setString(2, "test");

int ii = pst.executeUpdate();

// 检索对象生成的键

rs = pst.getGeneratedKeys();

if (rs.next()) {

System.out.println("数据主键:" + rs.getString(1));

}

ConnectionManager.closeAll(rs, pst, conn); // 关闭资源

} catch (SQLException e) {

e.printStackTrace();

}

}

}以下是JDBC辅助类,不是本文重点import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class ConnectionManager {

public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

public static final String URL = "jdbc:oracle:thin:@localhost:1521/orcl";

public static final String USERNAME = "root";

public static final String PASSWORD = "root";

/**

* 通过静态代码块 注册数据库驱动

*/

static{

try {

Class.forName(DRIVER);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

/**

* 获得Connection

*

* @return

*/

public static Connection getConnection() {

Connection conn = null;

try {

conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);

}catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

/**

* 关闭ResultSet

* @param rs

*/

public static void closeResultSet(ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭Statement

* @param st

*/

public static void closeStatement(Statement st) {

if (st != null) {

try {

st.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭Connection

* @param conn

*/

public static void closeConnection(Connection conn) {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭全部

* @param rs

* @param sta

* @param conn

*/

public static void closeAll(ResultSet rs,Statement sta,Connection conn){

closeConnection(conn);

closeStatement(sta);

closeResultSet(rs);

}

}

控制台打印:数据主键:AAAT2zAANAAACalAAB而我们的主键是ID值为123x.那打印的AAAT2zAANAAACalAAB是什么玩意呢,使用rs.getObject(1)在控制台打印,显示如下:

其实是test表的ROWID字段值

ae87f3f87dfda35bd6f81e43cf09cdd9.png

如果要获得指定的ID字段值 可以用如下方法:String generatedColumns[] = { "ID" };

pst = conn.prepareStatement(sql, generatedColumns);

原文:http://blog.csdn.net/itmyhome1990/article/details/41600309

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值