2017-12-05 12 views
1

のために私は私のコンボボックスの値を取得し、それをデータベースに保管しようとしています。しかし、私はこのエラーを取得する:このコードを使用するとjava.lang.NumberFormatException:入力文字列のコンボボックス

Executing F:\eLibraryServer\dist\run2044401483\eLibraryServer.jar using platform C:\Program Files\Java\jdk1.8.0_151\jre/bin/java 
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Node.fireEvent(Node.java:8413) 
at javafx.scene.control.Button.fire(Button.java:185) 
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:417) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._enterNestedEventLoopImpl(Native Method) 
at com.sun.glass.ui.win.WinApplication._enterNestedEventLoop(WinApplication.java:204) 
at com.sun.glass.ui.Application.enterNestedEventLoop(Application.java:511) 
at com.sun.glass.ui.EventLoop.enter(EventLoop.java:107) 
at com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(QuantumToolkit.java:583) 
at javafx.stage.Stage.showAndWait(Stage.java:474) 
at elibraryserver.NewStudentController.initRegister(NewStudentController.java:152) 
at elibraryserver.serverController.addStudentButtonAction(serverController.java:71) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.control.MenuItem.fire(MenuItem.java:462) 
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) 
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:417) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) 
at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
... 106 more 
Caused by: java.lang.NumberFormatException: For input string: "cmbCourse" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:580) 
at java.lang.Integer.valueOf(Integer.java:766) 
at elibraryserver.NewStudentController.registerButtonAction(NewStudentController.java:180) 

String query = ("INSERT INTO tblusers (first_name, middle_initial, last_name, username, password," 
        + " privilege) VALUES (?,?,?,?,?,?)"); 
      stmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
      stmt.setString(1, txtFn.getText()); 
      stmt.setString(2, txtMi.getText()); 
      stmt.setString(3, txtLn.getText()); 
      stmt.setString(4, txtUser.getText()); 
      stmt.setString(5, txtPass.getText()); 
      stmt.setString(6, "student"); 
      stmt.executeUpdate(); 
      ResultSet rs = stmt.getGeneratedKeys(); 
      Integer key =- 1;     
      if (rs.next()) { 
       key = rs.getInt(1); 
      }     
      String query2 = ("INSERT INTO tblcourseinfo (user_id, course_id, school_id) VALUES (?,?,?)"); 
      stmt = conn.prepareStatement(query2); 
      stmt.setInt(1, key); 
      stmt.setInt(2, Integer.valueOf(cmbCourse.getId())); 
      stmt.setInt(3, Integer.valueOf(cmbSchool.getId())); 
      stmt.executeUpdate(); 

をNumberFormatExceptionが何を意味するのでしょうか?そして、別のテーブルに値を挿入するComboBoxesのためにここに別の挿入ステートメントを追加するのは間違いですか?挿入されたデータは、ComboBoxの外部キーである必要があります。

EDIT:IDではなく変数名が表示されます。ここで

cmbCourse.getId(): cmbCourse 
cmbSchool.getId(): cmbSchool 

は、あなたがしようとどのように私のコンボボックスが単純に移入され方法

public void populateCourse() { 
    QueryCourses qc = new QueryCourses(); 
    HashMap<String, Integer> map = qc.hashMap(); 

    cmbCourse.getItems().setAll(map.keySet()); 
} 

QueryCourses.java

public class QueryCourses { 
Statement stmt = null; 
Connection conn = null; 
ResultSet rs = null; 

public HashMap<String, Integer> hashMap(){ 
    HashMap<String, Integer> map = new HashMap<>(); 
    conn = DbConnection.ConnectDB(); 

    try { 
     stmt = conn.createStatement(); 
     String qry = "SELECT `course_id`, `course_title` FROM `tblcourses`"; 
     rs = stmt.executeQuery(qry); 
     Courses crse; 

     while (rs.next()) {     
      crse = new Courses(rs.getInt(1), rs.getString(2)); 
      map.put(crse.getCourseTitle(), crse.getCourseId()); 
     } 
    } catch (SQLException ex) { 
     Logger.getLogger(NewStudentController.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    return map; 
} 
} 
+0

まあ、 "cmbCourse"は数字ではありません。 – Eran

+0

'cmbCourse.getId()'はおそらく整数を表す文字列の代わりに文字列 "cmbCourse"を返します。 – Berger

+0

あなたは正しいと思います。それについても考えていますが、ComboBox用のHashMapがありますが、これでキーを取得できますか? –

答えて

1

のクエリであなたのHashMap宣言

HashMap<String, Integer> map = new HashMap<>(); 

ですtで地図を塗りつぶす彼はStringキーです。

map.put(crse.getCourseTitle(), crse.getCourseId()); 

コンボボックスは、String型のキーセットで構成します。

cmbCourse.getItems().setAll(map.keySet()); 

ここで、コンボボックスから値を取得し、文字列から数値に変換できないStringを返します。

更新:

public class Courses { 
    private int id; 
    private String title; 

    public Courses (int id, String name) { 
     this.id = id; 
     this.title = name; 
    } 
    public int getId() { 
     return id; 
    } 

    public String getTitle() { 
     return title; 
    } 
    public String toString() { 
     return title; 
    } 
} 

try { 
      stmt = conn.createStatement(); 
      String qry = "SELECT `course_id`, `course_title` FROM `tblcourses`"; 
      rs = stmt.executeQuery(qry); 
      Courses crse; 

      while (rs.next()) { 
       crse = new Courses(rs.getInt(1), rs.getString(2)); 
       cmbCourse.addItem(crse); //you directly add item in combo course. 
       // overload the toString of Course class. 
      } 
     } catch (SQLException ex) { 
      Logger.getLogger(NewStudentController.class.getName()).log(Level.SEVERE, null, ex); 
     } 

String query = ("INSERT INTO tblusers (first_name, middle_initial, last_name, username, password," 
       + " privilege) VALUES (?,?,?,?,?,?)"); 
     stmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
      stmt.setString(1, txtFn.getText()); 
      stmt.setString(2, txtMi.getText()); 
      stmt.setString(3, txtLn.getText()); 
      stmt.setString(4, txtUser.getText()); 
      stmt.setString(5, txtPass.getText()); 
      stmt.setString(6, "student"); 
      stmt.executeUpdate(); 
     ResultSet rs = stmt.getGeneratedKeys(); 
     Integer key =- 1; 
      if (rs.next()) { 
      key = rs.getInt(1); 
     } 
     String query2 = ("INSERT INTO tblcourseinfo (user_id, course_id, school_id) VALUES (?,?,?)"); 
     stmt = conn.prepareStatement(query2); 
      stmt.setInt(1, key); 
      Course cr =(Course)cmbCourse.getSelectedItem(); 
      stmt.setInt(2, cr.getId()); 
      School cs =(School)cmbSchool.getSelectedItem(); 
      stmt.setInt(3, Integer.valueOf(cs.getId()); 
      stmt.executeUpdate(); 

更新:HashMapのを使用して

QueryCourses qc = new QueryCourses(); 
HashMap<String, Integer> map = qc.hashMap(); 

//get the course title from combo box. 
String courseTitle = (String) cmbCourse.getSelectedItem(); 
String school = (String) cmbSchool.getSelectedItem(); 

//get value(id) from course HashMap with key <courseTitle> 
stmt.setInt(2, map.get(courseTitle)); 

//do same for school 
+0

どのようにIDを取得するのですか? –

+0

私のQueryCoursesはComboBoxとは別のクラスで、cmbCourse.addItem(crse)は使用できません。 –

+0

create 'Course'オブジェクトのリストを返し、ComboBoxのようなcomboBoxを返してビルドします。 cmbCourse =新しいComboBox(ListCourse.getItems()); ' – eigenharsha

関連する問題