2011-03-16 2 views
2

SQL 데이터베이스에서 쿼리를 검색하는 데 문제가 있습니다. 나는 수치스러운 일들을 에 추가하여 데이터베이스에을 추가 할 수는 있지만 그 반대의 경우에는 지나치게 많은 양의 어려움을 겪고 있습니다. 순서대로 세 가지 :SQL Datetime을 Java 응용 프로그램에 제대로 다시 가져 오려면 어떻게해야합니까?

는 SQL 테이블 자체 :

CREATE TABLE patientInstructions (
    id   INT UNSIGNED AUTO_INCREMENT, 
    lastUpdated datetime NOT NULL, 
    PatientID   BIGINT UNSIGNED NOT NULL, 
    HCPID    BIGINT UNSIGNED NOT NULL, 
    OVid    BIGINT UNSIGNED NOT NULL, 
    urlLink    VARCHAR(250) NOT NULL, 
    linkInstructions VARCHAR(500) NOT NULL, 
    linkName   VARCHAR(100) NOT NULL, 
    PRIMARY KEY (id) 
) AUTO_INCREMENT=1 ENGINE=MyISAM; 

나는 이유는 내가 -1L 대신 데이터베이스에 저장된 실제 데이터 값을 받고 있어요 (실패 메서드 호출,

public String getLastUpdated(long ovID) throws DBException { 
     try { 
      return psiDAO.getLastUpdated(ovID); 
     } catch (myOwnException e) { 
      e.printStackTrace(); 
      return "-1L"; 
     } 
    } 

을 그리고 마지막으로, 메서드 호출이 실패하는 : 문제가) 처음에이 알고

public String getLastUpdated(long ovId) throws DBException { 
     Connection conn = null; 
     PreparedStatement ps = null; 
     try { 
      conn = factory.getConnection(); 
      ps = conn.prepareStatement("SELECT * FROM patientInstructions" 
        + " WHERE ovId=?"); 
      ps.setLong(1, ovId); 
      ResultSet rs = ps.executeQuery(); 
      java.util.Date updated = new java.util.Date(); 
      updated = rs.getTime("lastUpdated"); 
      return updated.toString(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
      throw new DBException(e); 
     } finally { 
      DBUtil.closeConnection(conn, ps); 
     } 
    } 

SQL Datetime과 일치하는 Java 객체는 무엇입니까? 내가 rs.getTimestamp, rs.getDate 등을 시도했지만 더 이상 성공하지 못했다. 결과 집합의 데이터를 Java 객체로 다시 전송하는 실수를하고 있습니까?

+1

'경우,'다음 라인'null.toString() '실패 할 것입니다 – RichardTheKiwi

+0

스택 트레이스를 보여 주시겠습니까? – RichardTheKiwi

+0

@ 리차드 나중에 참조 할 수 있겠습니까? 또는 아마도 오히려, 어디에서 인쇄 된 것입니까 (저는 Eclipse를 사용하고 있습니다)? –

답변

2

은 첫 번째 행을 포함하여 각 행에 액세스하기 전에 ResultSet에서 ResultSet.next()를 호출해야합니다. 당신은 여기서 그것을하지 않습니다; 예외 메시지가 실제로이를 알려야합니다.

1

java.sql.Date, java.sql.Time 및 java.sql.Timestamp의 세 클래스가 있습니다. 어느 것이 SQL의 DATETIME과 가장 밀접한 관련이 있는지 모르겠습니다. 세 가지 모두 java.util.Date에서 파생되므로 rs.getTime을 호출 한 결과를 할당 할 수 있습니다.

여기에는 테스트 할 수있는 설정이 없지만 java.sql. *에서 유형 중 하나를 사용하여 시도해 볼 것이고 결과를 볼 수 있습니다.

웁스! 어니스트 (Ernest 's) 전에 답을 올렸고 누락 된 rs.next()를 알지도 못했습니다. 그건 분명히 당신의 문제이며, java.util.Date는 그 변화와 함께 당신을 위해 잘 작동 할 것입니다.

+0

그게 무슨 가치가 있는지, 나는 데이터베이스에 타임 스탬프로 커밋을해서 내 혼란을 가중시켰다. –

0

여기에 예외를 붙여 넣으십시오. 결과 세트에서 값을 검색하기 전에 ResultSet의 다음 메소드를 호출해야합니다. 또한 시도하십시오 java.sql.Timestamp lastUpdatedTimestamp = getTimestamp("lastUpdated") 필요한 경우 나중에 타임 스탬프를 String으로 변환 할 수 있습니다.

1

데이터 유형이 datetime이므로 getTimestamp()을 사용해야합니다. 자세한 내용은 datatype mapping information을 참조하십시오.

그래서, 코드는 다음과 같이 보일 것이다 : - updated` 업데이트 = rs.getTime ("lastUpdated")`에서 null의

... 
ResultSet rs = ps.executeQuery(); 

String updated = ""; 

if (rs.next()) { 
    updated = rs.getTimestamp("lastUpdated").toString(); 
} 

rs.close(); 
ps.close(); 

return updated; 
+0

나는 지금 getTimestamp를 사용하고 있지만 (실제로 제안하기 전에) getTime *이 작동합니다. 단지 저장된 데이터보다 적은 데이터 만 표시합니다. –

관련 문제