2017-04-30 10 views
0

uni.Im 작업을 수행하는 동안 select 쿼리의 이상한 동작이 나타났습니다. 필자의 oracle db에있는 테이블에서 데이터를 가져옵니다.날짜 열에 대한 선택 쿼리의 이상한 동작

selectString = "select * from reservation"; 
prestatement = dbConnection.prepareStatement(selectString); 
rs = prestatement.executeQuery(selectString); 
while (rs.next()) { 
    String rdate = rs.getString("reservdate").substring(0, 10); 
    jComboBox1.addItem(rdate); 
//.... 
//....etc.. 

것은 무엇을 내 콤보 상자에 표시되는 것은 내가 내가 선택한 날짜와 사람을 선택해야합니다 경우 일부 데이터를 가져해야 그 후 '1999년 10월 10일'처럼 생각 때문이다 콤보 상자에있는 항목입니다. 내 문제가 있습니다.

String x = String.valueOf(jComboBox1.getSelectedItem()); 
selectString="select * from reservation where reservdate='"+x+"'"; 
//...etc.. 

내가 메시지와 함께 SQL 예외를 받고 그 메신저 실행 한 후 : 메시지 : ORA-01861를 : 나는 조금에게 웹을 검색하고 발견 형식 문자열 일치하지 않는 문자가 나는이 선택 쿼리의 모든 작업을 실행하는 경우 잘

selectString="select * from reservation where reservdate='10-OCT-99'"; 

그래서 제 질문은, 내가이 형식 콤보 상자에서 편집 모든 날짜를 시도해야이 일하러의 평균을 할 수있는 가장 좋은 방법은 무엇입니까? 또는 뭔가 잘못하고있는 모든 일을하고 그것을 바꿔야합니까?

미리 감사드립니다.

답변

0

다음 중 하나를 수행 할 수 있습니다 :

1이 관련 클래스를 오버라이드 (override) '(이 특정한 경우에, 그 이미 문자열을 반환 getSelectedItem 당신이 필요하지 않을 수 있습니다 그 어떤 객체가 한 String.valueOf() 호출)에 toString 메소드 필요로하는 형식을 달성하십시오. (나쁜의 종류는해야 할 일)

2 오라클 DB는 (할 수있는 종류 더 나은 연습)의 TO_DATE 기능을 처리하자

"TO_DATE (yourDateString, 일자, 메세지, 숫자를 각각)"

String date = String.valueOf(jComboBox1.getSelectedItem()); 
selectString="select * from reservation where reservdate= TO_DATE('" + date + "','DD-MON-YY')"; 

그리고 다음과 같이 것이라고 된 PreparedStatement로 후자의 방법을 사용하여, SQL 주입을 방지하기 위해 :

String date = String.valueOf(jComboBox1.getSelectedItem());  
String selectString="select * from reservation where reservdate= TO_DATE(?,'DD-MON-YY')"; 
PreparedStatement preStatement = dbConnection.prepareStatement(selectString); 
preStatement.setString(1,date); 
ResultSet rs = preStatement.executeQuery(); 

Official Docs

+0

메신저 가져 오는 중 : 메시지 : ORA-01756 : 따옴표 붙은 문자열이 제대로 종료되지 않았습니다. –

+0

이제 내가 시작한 곳으로 돌아 왔습니다. 메시지 : ORA-01861 : 리터럴은 형식 문자열 –

+0

과 일치하지 않습니다. 또한 mm 대신 mm을 시도했지만 여전히 기울이지는 않습니다. –