2017-01-06 99 views
0

我想將兩行插入主表和詳細表中。如何獲得JDBC中的id_user(主鍵())

帶自動增量標識的主表和詳細表。

CREATE TABLE MI_User (
    id_user NUMBER(11) NOT NULL, 
    age NUMBER(3), 
    name_user varchar2(128), 
    constraint USER_PK PRIMARY KEY (id_user)); 

CREATE TABLE Friends (
    id_friend NUMBER(11) not null, 
    name VARCHAR2(64), 
     id_user NUMBER(11) NOT NULL, 
    constraint FRIEND_PK PRIMARY KEY (id_friend) 
); 

模型類:

public class User { 
    private String id; 
    private Integer age; 
    private String name; 
    private ArrayList<Friend> friends; 
} 

public class Friend { 
    private Long id_user; 
    private String name; 
} 

有例如由Hibernate:

tx = session.beginTransaction(); 
User user = new User(name, age); 
employeeID = (Integer) session.save(employee); 
tx.commit(); 

我嘗試用JDBS插入:

conn = DriverManager 
        .getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr"); 
      ps = conn 
        .prepareStatement("INSERT INTO MI_USER (BALANCE, AGE, NAME_USER, GENDER, COMPANY, EMAIL, ADDRESS)\n" + 
          " VALUES (?, ?, ?, ?, ?, ?, ?)"); 
      ps.setDouble(1, user.getDoubleBallans()); 
      ps.setInt(2, user.getAge()); 
      ps.setString(3, user.getName()); 
      ps.executeUpdate(); 

如何獲得id_user和將行插入到詳細表中?

+0

您對這個問題的JDBC或Hibernate的答案感興趣嗎? –

回答

0

我認爲你可以使用ps.getGeneratedKeys()方法和conn.prepareStatement()方法發送Statement.RETURN_GENERATED_KEYS作爲第二個參數。

+0

另外,鏈接的問題不會爲Oracle回答,因爲在Oracle上執行此操作時還存在一些額外的問題,請參閱http://stackoverflow.com/questions/24136223/java-jdbc-primary-key-oracle-數據庫 –

+1

您當前的答案稍微好一點,但對於Oracle而言實際上並不正確,請參閱我以前的評論中的鏈接。 –