문제

방금 삽입 한 레코드의 기본 키를 얻는 크로스 데이터베이스 플랫폼 방법이 있습니까?

나는 그것을 언급했다 이 답변 전화하여 얻을 수 있다고 말합니다 SELECT LAST_INSERT_ID() 그리고 나는 당신이 전화 할 수 있다고 생각합니다 SELECT @@IDENTITY AS 'Identity'; JDBC 에서이 Accross 데이터베이스를 수행하는 일반적인 방법이 있습니까?

SQL Server, MySQL 및 Oracle에 액세스 할 수있는 코드에 대해 어떻게 구현할 것을 제안하지 않습니까?

도움이 되었습니까?

해결책

내 코드에서 복사 :

pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);

Pinsertoid는 준비된 진술입니다.

그런 다음 키를 얻을 수 있습니다.

// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
  int newId = rs.getInt(1);
  oid.setId(newId);
}

이것이 당신에게 좋은 출발점을 제공하기를 바랍니다.

다른 팁

extraneon의 대답은 정확하지만 오라클에서는 작동하지 않습니다.

Oracle을 위해이 작업을 수행하는 방법은 다음과 같습니다.

String key[] = {"ID"}; //put the name of the primary key column

ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();

rs = ps.getGeneratedKeys();
if (rs.next()) {
    generatedKey = rs.getLong(1);
}

당신은 시도 했습니까? statement.executeUpdate () 그리고 statement.getGeneratedKeys () 행동 양식? 이있다 DeveloperWorks 기사 그것은 접근법을 언급합니다.

또한 JDBC 4.0에서 Sun이 추가했습니다 row_id 기능 이를 통해 행에 고유 한 핸들을 얻을 수 있습니다. 이 기능은 Oracle 및 DB2에서 지원합니다. SQL Server의 경우 다음과 같은 타사 드라이버가 필요할 것입니다. 이 하나.

행운을 빕니다!

Oracle의 경우, Hibernate는 PKE 값 생성 시퀀스를 매핑 한 경우 시퀀스에서 Next_Value를 사용합니다.

MySQL 또는 MS SQL Server에 대한 기능이 확실하지 않습니다.

Spring은 유용한 지원을 제공합니다 이 작업 그리고 참조 안내서는 귀하의 질문에 답하는 것 같습니다.

적절한 준비 상태를 만들 수있는 표준 단일 방법이 없습니다 (메소드 서명이 왜 그런지 설명). Oracle에서 작동하고 다른 플랫폼에서 작동하지 않을 수있는 예는 ...

MySQL 에서이 예제를 테스트했으며 거기에서도 작동하지만 다른 플랫폼에 대해서는 말할 수 없습니다.

SQL-99를 준수하는 데이터베이스의 경우 ID 열을 사용할 수 있습니다. 테이블 작성 tomeable (ID 정수는 항상 ID로 생성됩니다 (101로 시작) 기본 키, ...

사용 getGeneratedKeys () 방금 삽입 된 키를 검색합니다 executeUpdate (String SQL, int AutogeneratedKeys). executeUpdate ()를 위해 2nd 매개 변수를 위해 use are.return_generated_keys.

ID 열을 ID 정수로 선언합니다. auto_increment

이 후이 코드를 실행 한 후

ResultSet ds=st.executeQuery("select * from user");
                while(ds.next())
                {

                 ds.last();
                System.out.println("please note down your registration id  which is "+ds.getInt("id"));
                }
                ds.close();

위의 코드는 현재 행의 ID를 보여줍니다.

제거하면 ds.last() ID 열의 모든 값을 표시하는 것보다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top