2016-10-22 3 views
0

양식 (보기)에서 사용자 입력을 가져 와서 데이터베이스에 삽입하는 두 가지 종류의 필드에서 제출을 수행해야하는데 이미 검색을 시도하고 무언가를 찾으려고했습니다. 그물과 내가 본 모든 것은 자동으로 PC로부터 날짜와 시간을 삽입하는 코드 였지만, 사용자가 입력 한 데이터를 삽입하고 싶습니다. 다음과 같이하려고합니다 :날짜 및 시간 형식을 입력하는 방법

호출 모델 클래스 :

package br.com.jdbc.victor.model; 
 

 
import java.sql.Date; 
 
import java.sql.Time; 
 

 
/** 
 
* 
 
* @author Victor 
 
*/ 
 
public class Call { 
 
    private Long callId; 
 
    private String priority; 
 
    private int priorityId; 
 
    private Long priorityDetailId; 
 
    private Date initialDate, finalDate; 
 
    private Time initialTime, finalTime; 
 
    
 
    
 
    public Call(String priority, int priorityId, Date initialDate, Time initialTime, Time finalTime) { 
 
     this.priority = priority; 
 
     this.priorityId = priorityId; 
 
     this.initialDate = initialDate; 
 
     this.initialTime = initialTime; 
 
     this.finalTime = finalTime; 
 
    } 
 

 
    public Call(String priority, Long priorityDetailId) { 
 
     this.priority = priority; 
 
     this.priorityDetailId = priorityDetailId; 
 
    } 
 
    
 
    public Call(int priorityId, Long callId){ 
 
     this.priorityId = priorityId; 
 
     this.callId = callId; 
 
    } 
 
    
 
    public Call(){ 
 
     this.priority = getPriority(); 
 
     this.priorityId = getPriorityId(); 
 
     this.initialDate = getInitialDate(); 
 
     this.initialTime = getInitialTime(); 
 
     this.finalTime = getFinalTime(); 
 
     //this.initialDate = new Date(); 
 
     //this.initialTime = new Time(); 
 
     //this.finalTime = new Time(); 
 
    } 
 
    
 

 
/* Getters and Setters.... */ 
 

 
}

MySQLCallDAO DAO 클래스 :

,536,913,632

10

package br.com.jdbc.victor.dao.daoentities; 
 

 
import br.com.jdbc.dao.DAOException; 
 
import br.com.jdbc.victor.controller.CallDAO; 
 
import br.com.jdbc.victor.model.Call; 
 
import br.com.jdbc.victor.model.PriorityDetail; 
 
import java.io.FileInputStream; 
 
import java.sql.Connection; 
 
import java.sql.Date; 
 
import java.sql.DriverManager; 
 
import java.sql.PreparedStatement; 
 
import java.sql.ResultSet; 
 
import java.sql.SQLException; 
 
import java.sql.Statement; 
 
import java.sql.Time; 
 
import java.text.SimpleDateFormat; 
 
import java.util.ArrayList; 
 
import java.util.List; 
 
import java.util.Properties; 
 
import java.util.logging.Level; 
 
import java.util.logging.Logger; 
 

 
/** 
 
* 
 
* @author Victor 
 
*/ 
 
public abstract class MySQLCallDAO implements CallDAO { 
 
    
 
    final String INSERT = "INSERT INTO calls (priority, priorityNum, initialDate, initialTime, finalTime) VALUES (?,?,?,?,?)"; 
 
    final String GETALL = "SELECT * FROM calls"; 
 
    final String GETID = "SELECT callId FROM calls ORDER BY callId DESC LIMIT 1"; 
 
    final String ORDER = GETALL + " ORDER BY priorityNum, callId"; 
 
    
 
    
 
    //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
 
    //SimpleDateFormat stf = new SimpleDateFormat("HH:mm"); 
 
    private Connection con; 
 
    private PreparedStatement pstm; 
 
    private Statement stm = null; 
 
    private ResultSet rs = null; 
 
    
 
    
 
    public MySQLCallDAO(Connection con) { 
 
     this.con = con; 
 
    } 
 
    
 
    @Override 
 
    public void insert(Call o) throws DAOException { 
 
     
 
     try{ 
 
      pstm = con.prepareStatement(INSERT); 
 
      pstm.setString(1, o.getPriority()); 
 
      pstm.setInt(2, o.getPriorityId()); 
 
      pstm.setDate(3, new java.sql.Date(o.getInitialDate().getTime())); 
 
      pstm.setTime(4, new Time(o.getInitialTime().getTime())); 
 
      pstm.setTime(5, new Time(o.getFinalTime().getTime())); 
 
      
 
      if(pstm.executeUpdate() == 0){ 
 
       throw new DAOException("The update can't be saved"); 
 
      } 
 
     } catch (SQLException ex) { 
 
      //throw new DAOException("SQL ERROR"); 
 
      ex.printStackTrace(); 
 
     } finally { 
 
      if(pstm != null){ 
 
       try { 
 
        pstm.close(); 
 
       } catch (SQLException ex) { 
 
        throw new DAOException("Error to close the connection", ex); 
 
       } 
 
      } 
 
     } 
 
    }
FormNewCall보기 클래스 :

run: 
 
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date 
 
\t at br.com.jdbc.victor.view.FormNewCall.btSubmitActionPerformed(FormNewCall.java:360) 
 
\t at br.com.jdbc.victor.view.FormNewCall.access$500(FormNewCall.java:30) 
 
\t at br.com.jdbc.victor.view.FormNewCall$6.actionPerformed(FormNewCall.java:152) 
 
\t at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
 
\t at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
 
\t at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
 
\t at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
 
\t at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
 
\t at java.awt.Component.processMouseEvent(Component.java:6533) 
 
\t at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
 
\t at java.awt.Component.processEvent(Component.java:6298) 
 
\t at java.awt.Container.processEvent(Container.java:2236) 
 
\t at java.awt.Component.dispatchEventImpl(Component.java:4889) 
 
\t at java.awt.Container.dispatchEventImpl(Container.java:2294) 
 
\t at java.awt.Component.dispatchEvent(Component.java:4711) 
 
\t at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
 
\t at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
 
\t at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
 
\t at java.awt.Container.dispatchEventImpl(Container.java:2280) 
 
\t at java.awt.Window.dispatchEventImpl(Window.java:2746) 
 
\t at java.awt.Component.dispatchEvent(Component.java:4711) 
 
\t at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
 
\t at java.awt.EventQueue.access$500(EventQueue.java:97) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:709) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:703) 
 
\t at java.security.AccessController.doPrivileged(Native Method) 
 
\t at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
 
\t at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
 
\t at java.awt.EventQueue$4.run(EventQueue.java:731) 
 
\t at java.awt.EventQueue$4.run(EventQueue.java:729) 
 
\t at java.security.AccessController.doPrivileged(Native Method) 
 
\t at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
 
\t at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
 
\t at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
 
\t at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
 
\t at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) 
 
\t at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184) 
 
\t at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229) 
 
\t at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227) 
 
\t at java.security.AccessController.doPrivileged(Native Method) 
 
\t at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227) 
 
\t at java.awt.Dialog.show(Dialog.java:1084) 
 
\t at java.awt.Component.show(Component.java:1671) 
 
\t at java.awt.Component.setVisible(Component.java:1623) 
 
\t at java.awt.Window.setVisible(Window.java:1014) 
 
\t at java.awt.Dialog.setVisible(Dialog.java:1005) 
 
\t at br.com.jdbc.victor.view.FormNewCall.lambda$main$0(FormNewCall.java:521) 
 
\t at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
 
\t at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
 
\t at java.awt.EventQueue.access$500(EventQueue.java:97) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:709) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:703) 
 
\t at java.security.AccessController.doPrivileged(Native Method) 
 
\t at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
 
\t at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
 
\t at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
 
\t at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
 
\t at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
 
\t at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
 
\t at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
 
\t at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
,312,937 :

private void btSubmitActionPerformed(java.awt.event.ActionEvent evt) {           
 
     try {           
 
      Call call = new Call(); 
 
      MySQLDaoManager man = new MySQLDaoManager("root", "", "localhost", "attendances", 3306); 
 
      //java.util.Date date_util = new java.util.Date(); 
 
      //java.sql.Date date_sql = new java.sql.Date(date_util.getDate()); 
 
      //java.sql.Time time_sql = new java.sql.Time(date_util.getTime()); 
 
      
 
      try { 
 
       call.setPriority(cbPriorityDetail.getSelectedItem().toString()); 
 
       call.setPriorityNum(Integer.parseInt(tfPriorityDetailId.getText())); 
 
       tfInitialDate.commitEdit(); 
 
     /* The line that gives error under */ 
 
       call.setInitialDate((Date) tfInitialDate.getValue()); 
 
       call.setInitialTime(Time.valueOf(tfInitialTime.getText())); 
 
       call.setFinalTime(Time.valueOf(tfFinalTime.getText())); 
 
       
 
       man.getCallDAO().insert(call); 
 
       
 
       if(tfCallId.getText().length() != 0){ 
 
        call.setCallId(Long.parseLong(tfCallId.getText())); 
 
        man.getCallDAO().update(call); 
 
       } 
 
       if(tfInitialDate.getValue() != null && tfInitialTime.getValue() != null && tfFinalTime.getValue() != null){ 
 
        JOptionPane.showMessageDialog(rootPane, "User Inserted!", "Insert Successful", JOptionPane.INFORMATION_MESSAGE); 
 
        btNewActionPerformed(evt); 
 
       } else { 
 
        JOptionPane.showMessageDialog(rootPane, "Please, fill the fields again", "Insert not sucessful", JOptionPane.INFORMATION_MESSAGE); 
 
        btNewActionPerformed(evt); 
 
       } 
 
      } catch (DAOException ex) { 
 
       JOptionPane.showMessageDialog(rootPane, "MySQL Error", "Error", JOptionPane.ERROR_MESSAGE); 
 
      } catch (ParseException ex) {    Logger.getLogger(FormNewCall.class.getName()).log(Level.SEVERE, null, ex); 
 
      } 
 
     } catch (SQLException ex) { 
 
      JOptionPane.showMessageDialog(rootPane, "Error to make connection", "Error", JOptionPane.ERROR_MESSAGE); 
 
     } 
 
    }   

그래서 나는 모든 방법하지만 스택 트레이스 예외를 시도했습니다

내가하시기 바랍니다 데이터베이스의 사용자 날짜와 시간 입력을 허용하는 코드를 할 어떤 조언을 알고 싶습니다! 고마워요 !!

+0

왜 java.util.Date가 왜 java.sql.date를 사용하고 사용하지 않는에 반환 형식으로 된 다음 개체가되었다? 특별한 요구 사항이 있습니까? – Irakli

+0

이 예외가 발생하는 위치에 대해 구체적으로 설명하십시오. 전체 스택 추적을 게시하고 예외 위치를 나타냅니다. 우리는'java.util.Date'를'java.sql.Date'에 던져 넣으려는 곳을 찾기 위해 코드의 벽을 살펴 보려고하지 않습니다. –

+0

@JONIVar 그는 JDBC를 사용하면서 결국에는 java.sql.Date (또는 java.sql.Timestamp)를 필요로합니다. –

답변

2
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
    java.util.Date cannot be cast to java.sql.Date 

    at br.com.jdbc.victor.view.FormNewCall.btSubmitActionPerformed(FormNewCall.java:360) 

FormNewCall 클래스의 상단에 당신이 import java.sql.DatetfInitialDate.getValue() 반환 다른 클래스이며, 그들이 그 방법으로 호환되지있어 java.util.Date 같은 것을 가지고있다.

이 문제를 해결하는 가장 쉬운 방법은 적절한 변환을 추가하는 것입니다. 즉, 이미 수입 때문에

call.setInitialDate(new java.sql.Date(tfInitialDate.getValue().getTime())); 

아마 당신도 java.sql. 패키지 지정을 생략 할 수 있습니다.

업데이트는 실제로 getValue()

call.setInitialDate(new java.sql.Date(((java.util.Date)tfInitialDate.getValue()).getTime())); 
+0

나는 그것을 시도했지만 getTime() 메소드를 삽입 할 수 없다. 여기에 "심볼을 찾을 수 없다"는 것이 주어졌고 왼쪽의 ctrl + 스페이스 바에 나열되어 있지 않다. 이 메서드를 호출하려면 어떻게해야합니까?! getValue() 후에 –

+0

getTime() 메소드. –

+0

@VictorG. getValue() 메소드의 반환 유형은 무엇입니까? (전체 패키지 이름을 적어주세요) – Ivan

-1

코드의 문제점을 식별 할 수 없습니다.

date_util.getDate()을 사용하지 않아야합니다. 당신이 원하는 것은 date_util.getTime()입니다.

어쨌든 this link이 도움이되는지 확인하십시오. 이 아마 의미

+0

영어로 전체 코드를 수정하고 내 질문을 명확하게 끝냈습니다 ... 문제는이 줄에 있습니다 : –

+0

call.setInitialDate ((Date) tfInitialDate.getValue()); 처음에는 try 블록 앞에 주석 처리 된 행을 사용했지만 시스템 날짜와 시간을 선택합니다. java.sql.Date로 캐스팅해야하는지 여부는 알 수 없습니다. 이미이 형식을 지정했습니다. 속성의 textField> formatterFactory –

관련 문제