2010-08-16 2 views
3

나는 mysql의 테이블에서 시간 열 값을 추출하기 위해 java와 함께 일하고있다.Java에서 시간 오류에 대한 잘못된 형식을 해결 하시겠습니까?

아래 코드는 내가 보내는 쿼리를 보여줍니다. 00 : 우리는 어떤 지연을 돌파 00 의미 문제가 내가 얻을 수 있습니다 :

String query="select id,time from table where Hour(time)<=32 "; 
ResultSet res = stmt.executeQuery(query); 
while (res.next()) { 
    String id = res.getString(1); 
    Time tc = res.getTime("time"); 
    System.out.println(tc); 
} 

시간 값이 마이너스 (-56가 될 수 있습니다. 대한 java.sql.SQLException:java.sql.SQLException: Bad format 시간 '-05 : 48 : 49'열에 당신의 도움 2.

감사합니다.

+1

[time] 열의 유형은 무엇입니까? –

답변

1

previous question에서 대답하는대로 부호있는 정수으로 저장되는 초로 저장하고 처리해야합니다.

시간 유형은 음수 일 수 없습니다. 또한 varchar/string에서 수학을 수행하고 Andreas_D에서 제안한대로 불필요한 오버 헤드를 추가하는 등 실행 가능한 형식으로 되돌릴 수는 없습니다. 부호있는 정수는 실제로 이것을 위해 사용할 수있는 최상의 데이터 유형입니다. PreparedStatement#setInt()을 사용하여 저장하고 ResultSet#getInt()을 사용하십시오.

+0

완전히 '불필요한 오버 헤드'에 동의합니다 :) –

2

된 ResultSet 구현에 의해 수행 된 변환이 부정적인 시간 값이 작동하지 않는 경우 당신은 여전히 ​​문자열로 값을 읽고에 문자열을 변환하는 사용자 정의 메소드를 구현할 수 있습니다 날짜 (및 그 반대) :

String query="select * from table where Hour(time)<=32 "; 
    ResultSet res = stmt.executeQuery(query); 
    while (res.next()) { 
    String id = res.getString(1); 
    Time tc = convertToDate(res.getString("time")); 
    System.out.println(tc); 
    } 

    // .... 

} 

private Time convertToDate(String s) { 
    // implement magic here 

} 
0

문제는 쿼리 자체에 있다고 생각합니다.

[select * from table where Hour (time) < = 32] 쿼리를 direcly 실행할 때 오류가 발생하지 않습니까? 오류가 where 절에 있다고 상상해보십시오 [시간 (시간) < = 32]

결과 집합에는 where 절에 대한 정보가 없습니다. 그냥 모든 열을 반환합니다.

몇 가지 이상한 유형을 반환하지 않는지 확인하려면 열을 확인해야합니다.

1

아마도이 답변은 너무 늦었을 것입니다. 그러나 원하는 필드에 문자열을 연결하는 것만으로 해결할 수 있습니다. 말 :

select id,concat(time,'') from table where Hour(time)<=32

감사 사울 히달고을.

+0

그 문제는 그 필드가 자바'Time' 객체로 변환 될 수 없다는 것입니다. 어떻게 빈 문자열을 추가하면 도움이 될까요? – Tim

관련 문제