使用java将插入行添加到Oracle

时间:2014-09-01 14:26:30

标签: java sql oracle

我正在构建一个java程序来将数据插入到我的oracle数据库中。 我的问题是我需要插入两个表,并且为了达到我在TABLE_A触发器中使用的唯一行,然后在序列中插入get next val之前触发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)

2 个答案:

答案 0 :(得分:2)

您可以使用INSERT语句中的RETURNING子句来完成此操作:

INSERT INTO table_a ( name,date) val ( 'Ryan','2014.01.01') RETURNING id INTO ?

答案 1 :(得分:2)

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/