使用java获取插入行到Oracle
Posted
技术标签:
【中文标题】使用java获取插入行到Oracle【英文标题】:Get inserted row to Oracle with java 【发布时间】:2014-09-01 14:26:29 【问题描述】:我正在构建一个 java 程序来将数据插入到我的 oracle 数据库中。 我的问题是我需要插入两个表,并在插入获取序列中的下一个 val 之前达到我在 TABLE_A 触发器中为 id 使用的唯一行。 但我需要 TABLE_B 相同的 id 进行连接。 (我无法获得 getval,因为如果另一个用户使用该程序怎么办......) 所以我需要以某种方式达到,当我使用 executeql(sql) 命令作为回报时,我会看到我提交的内容。
现在我使用我有名称和日期,所以我选择了刚刚插入名称和日期的 id。 但它不是最好的,因为在一天内我可以插入更多的名字。所以现在这不会是唯一的。 喜欢:
insert into table a ( name,date) val ( 'Ryan','2014.01.01')
这里的id是按顺序自动递增的
比另一个sql运行:
inert into table_b ( id,someval) val ( select id from table_a where
name ='Ryan', date='2014.01.01, 23)
所以我需要类似的东西:
system.out.println(smtp.executesql(sql).whatIinsertednow())
*than console:* '1 row insered (id,name,date) : ( 1, Ryan, 2014.01.01)
【问题讨论】:
您可以将生成的 ID 值取回like this;你已经拥有了其余的价值观了吗? 【参考方案1】:PreparedStatement prepareStatement = connection.prepareStatement("insert...",
new String[] "your_primary_key_column_name" );
prepareStatement.executeUpdate();
ResultSet generatedKeys = prepareStatement.getGeneratedKeys();
if (null != generatedKeys && generatedKeys.next())
Long primaryKey = generatedKeys.getLong(1);
我找到了完美的答案。我可以从 JAVA 插入,并用密钥返回。
完整版:
CREATE TABLE STUDENTS
(
STUDENT_ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2 (50 BYTE),
EMAIL VARCHAR2 (50 BYTE),
BIRTH_DATE DATE
);
CREATE SEQUENCE STUDENT_SEQ
START WITH 0
MAXVALUE 9999999999999999999999999999
MINVALUE 0;
还有 Java 代码
String QUERY = "INSERT INTO students "+
" VALUES (student_seq.NEXTVAL,"+
" 'Harry', 'harry@hogwarts.edu', '31-July-1980')";
// load oracle driver
Class.forName("oracle.jdbc.driver.OracleDriver");
// get database connection from connection string
Connection connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:sample", "scott", "tiger");
// prepare statement to execute insert query
// note the 2nd argument passed to prepareStatement() method
// pass name of primary key column, in this case student_id is
// generated from sequence
PreparedStatement ps = connection.prepareStatement(QUERY,
new String[] "student_id" );
// local variable to hold auto generated student id
Long studentId = null;
// execute the insert statement, if success get the primary key value
if (ps.executeUpdate() > 0)
// getGeneratedKeys() returns result set of keys that were auto
// generated
// in our case student_id column
ResultSet generatedKeys = ps.getGeneratedKeys();
// if resultset has data, get the primary key value
// of last inserted record
if (null != generatedKeys && generatedKeys.next())
// voila! we got student id which was generated from sequence
studentId = generatedKeys.getLong(1);
来源:http://viralpatel.net/blogs/oracle-java-jdbc-get-primary-key-insert-sql/
【讨论】:
【参考方案2】:您可以通过在 INSERT 语句中使用 RETURNING 子句来实现:
INSERT INTO table_a ( name,date) val ( 'Ryan','2014.01.01') RETURNING id INTO ?
【讨论】:
但是我怎样才能在 java 中得到它呢? (JDBC) 看看this solution on SO以上是关于使用java获取插入行到Oracle的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java spring 和休眠的 Oracle 插入需要太多时间