* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 64bit | |
9.1.0 | |
9.1.0 | |
jav |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
안녕하세요.
요세 큐브리드로 Spring 3.0 mvc와 큐브리드로 게시판을 만들어보고 있는 지정수라고 합니다.
db에 insert된 레코드의 키값을 알아오기 위해서
Spring에서 제공하는 아래 함수를 사용하려고 했는데 원하는 동작이 되지 않았습니다.
SimpleJdbcInsert.executeAndReturnKey(map);
해당 데이터베이스에서는 supportsGetGeneratedKeys 지원하지 않는다는 문구를 확인하였습니다.
좀 더 자세히 보려고
spring을 사용하지 않고 아래와 같이 java.sql.* 패키지 쪽만 사용해서 코드를 실행해보았습니다.
역시 supportsGetGeneratedKeys 값이 false로 넘어오는 것을 확인하였습니다.
그런데
두번째 굵은 표시 있는곳에서의 결과 값이
automatically generated key value = 73
으로 정상적으로 넘어왔습니다.
그럼 실질적으로는 지원하는것으로 보이는데 supportsGetGeneratedKeys 이 함수가 false를 반환합니다.
오동작을 하는 것으로 보입니다.
그래서 spring 프레임워크를 이용하면 GenerateKeys 관련 기능을 사용 못하는 것 같습니다.
http://www.cubrid.com/online_manual/843/api/api_jdbc_programming.htm
큐브리드 메뉴얼을 보면 해당 동작이 검증된 것 같은데 . [자동 증가 특성의 칼럼 값 검색]
con.getMetaData().supportsGetGeneratedKeys();
이 함수 확인 부탁드립니다.
게시판 찾아보니까 비슷한 질문이 있어서 링크주소 남깁니다.
try {
boolean supportsGetGeneratedKeys1 = dataSource.getConnection()
.getMetaData().supportsGetGeneratedKeys();
Log.i(CLASSNAME, "supportsGetGeneratedKeys1= "
+ supportsGetGeneratedKeys1);
Log.i(CLASSNAME, "ddddd11----2");
} catch (SQLException e1) {
// TODO Auto-generated catch block
Log.i(CLASSNAME, "ddddd11----3");
e1.printStackTrace();
}
String SQL = "insert into "file" (file_Type, orig_Name, file_Ext,"
+ "file_Size, is_Image, image_Width, image_Height,"
+ "image_Type, category, writeDate,ipaddress, ref_Id) values (?, ?,?, ?,?, ?,?, ?,?, ?,?, ?)";
try {
Class.forName("cubrid.jdbc.driver.CUBRIDDriver");
Connection con = DriverManager
.getConnection(
"jdbc:cubrid:localhost:30000:springdemo:::?charset=UTF-8",
"dba", "admin");
Log.i(CLASSNAME, "ddddd11----4");
boolean supportsGetGeneratedKeys2 = con.getMetaData()
.supportsGetGeneratedKeys();
Log.i(CLASSNAME, "supportsGetGeneratedKeys2= "
+ supportsGetGeneratedKeys2);
PreparedStatement pstmt = con.prepareStatement(SQL,
Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, fileType);
pstmt.setString(2, origName);
pstmt.setString(3, fileExt);
pstmt.setString(4, fileSize);
pstmt.setString(5, isImage);
pstmt.setInt(6, imageWidth);
pstmt.setInt(7, imageHeight);
pstmt.setString(8, imageType);
pstmt.setString(9, category);
pstmt.setDate(10, new java.sql.Date(writeDate.getTime()));
pstmt.setString(11, ipaddress);
pstmt.setInt(12, refId);
boolean exec = pstmt.execute();
ResultSet rs = pstmt.getGeneratedKeys();
while (rs.next()) {
int idColVar = rs.getInt(1);
System.out.println("automatically generated key value = "+ idColVar);
result = idColVar;
}
rs.close(); // Close ResultSet
pstmt.close();
} catch (ClassNotFoundException e) {
Log.i(CLASSNAME, "ClassNotFoundException");
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
Log.i(CLASSNAME, "SQLException");
// TODO Auto-generated catch block
e.printStackTrace();
}