2009-03-26 2 views
4

오라클은 char 열의 값을 채 웁니다. 따라서 CHAR (2) 열에 "a"를 삽입하면 해당 열을 "a"와 비교하여 해당 레코드를 가져올 수 없으므로 "a"와 비교하여 가져와야합니다. 권리?Oracle jdbc driver fixedString 속성을 사용하는 방법은 무엇입니까?

이 문제를 해결하기 위해 Oracle jdbc 드라이버에는 fixedString 속성이 있지만 작동하지 못합니다. fixedStringhere

나는 Oracle 10gR2 용 ojdbc14.jar 드라이버를 사용하고 Oracle 10gR2 데이터베이스에 액세스하고 있습니다.

내 코드입니다 :

try { 
     Properties props = new Properties(); 
     props.put("user", "****"); 
     props.put("password", "****"); 
     props.put("fixedString", true); 

     Class.forName("oracle.jdbc.driver.OracleDriver"); 

     String jdbcUrl = "jdbc:oracle:thin:@<host>:<port>:<sid>"; 

     Connection connection = DriverManager.getConnection(jdbcUrl, props); 

     PreparedStatement ps = connection.prepareStatement(
          "SELECT * FROM MY_TABLE WHERE MY_TABLE_ID = ?"); 
     ps.setObject(1, "abc"); // (*) 
     // MY_TABLE_ID is CHAR(15) 

     ResultSet rs = ps.executeQuery(); 
     while (rs.next()) 
     { 
      System.out.print("data: "); 
      System.out.println(rs.getString("MY_TABLE_ID")); 
     } 
     rs.close(); 
     ps.close(); 
     connection.close(); 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } 

위의 코드는 잘 실행 (예외가 발생하지)하지만 결과 집합하는 executeQuery 후 비어있는(). 내가

ps.setObject(1, "abc   "); 

에 대한 선 (*)를 변경하는 경우

그럼 난 내가 원하는 열을 얻는다. 그래서 그것은 드라이버가 fixedString 옵션을 무시하는 것 같습니다.

는 또한

ps.setObject(1, "abc", java.sql.Types.CHAR); 

의 라인 (*)를 변경 시도했습니다하지만 얻을의 ResultSet 다시 비어 있습니다. 내가 무엇이 누락 되었습니까? 사전에

덕분에

답변

2

props.put("fixedString", "true"); 

Oracle 문서로 사용해보십시오 질문이 아니었다 문자열로 fixedString는 (부울 값을 포함)

+0

이 속성은 setObject (...)에서만 작동합니다. 이 속성은 setString (...)을 호출 할 때 아무런 영향을주지 않습니다. – netjeff

1

당신은 데이터베이스에있는 모든 항목에 대해 동일한 길이 될 것입니다 문자열을 CHAR을 사용해야합니다. 가변 길이 문자열에는 VARCHAR을 사용하십시오.

+0

말한다. 칼럼 정의를 바꿀 수 없다. 그건 나에게 달린 것이 아니다. – mmutilva

+0

질문하는 동안 자신의 질문에 대답했습니다. CHAR는 고정 길이입니다. 오라클은 고정 길이와 일치하도록 문자열을 채 웁니다. 패드가있는 문자열을 제공해야합니다. VARCHAR은 패딩을 중지합니다. –

+0

질문은 특히 fixedString 속성에 관한 것입니다. – mmutilva

1

오라클 워드 프로세서는 정말로 격노하고 있습니다. 귀하의 질문 (이 사이트에 대해 내가 좋아하는 것 중 하나) 전에이 사실을 들어 본 적이 없었습니다. 이것을 들여다 보니 "FIXED CHAR"의미론을 사용 하겠지만, 어떻게 작동하는지 또는 예상되는 반환 값이 무엇인지, 매칭과 평등에 관한 행동 만 기술 할 것이라는 언급이 있습니다. "좋아요"를 사용하여 쿼리를 수행 할 수 있습니까? (훨씬 느린, 물론) 그 쿼리에 대한 고정 문자 의미를 해제? 트리밍 된 값만 DB에 삽입 하시겠습니까?

참조 here, here, here.

+0

방금 ​​fixedString 속성에 대한 참조를 추가했습니다. – mmutilva

관련 문제