2011-12-02 5 views
0

javaで作成されたフォームを使用してデータベースにエントリを挿入しようとしています。データベースから問題なく選択できますが、挿入するのが難しいです。この問題は、整数を正しく変換していないこと、あるいはSQLが整数をNumberフィールドに取り込まないことが原因であると私は信じています。私はわかりません。私は "AWT-EventQueue-0"エラーを受け取りますが、どこに指定していません。ここでフィールドの型が数値のSQLデータベースに挿入するためにStringをintに適切に変換する際に問題が発生しました

は私の入力テキストを変換するための私のコードの抜粋です:

public void addItem() throws ClassNotFoundException, SQLException{ 
    Item i1; 
    DataAccess DA = new DataAccess(); 
    this.txtOutput.setText(DA.testResult); 
    i1 = new Item(); 
    i1.setItemId(Integer.parseInt(this.txtItemId.getText())); 
    i1.setCategoryId(Integer.parseInt(this.txtCategoryId.getText())); 
    i1.setItemName(this.txtItemName.getText()); 
    i1.setItemDesc(this.txtItemDesc.getText()); 
    i1.setUnitPrice(Integer.parseInt(this.txtUnitPrice.getText())); 
    i1.setUnitStock(Integer.parseInt(this.txtUnitStock.getText())); 
    try { 
     i1.saveItem(); 
    } catch (ClassNotFoundException | SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    this.txtItemId.setText(""); 
    this.txtCategoryId.setText(""); 
    this.txtItemName.setText(""); 
    this.txtItemDesc.setText(""); 
    this.txtUnitPrice.setText(""); 
    this.txtUnitStock.setText(""); 
} 

また、ここで私はその後、私のデータベースにそのデータを挿入するために使用していたコードは次のとおりです。

public int saveItem() throws ClassNotFoundException, SQLException{ 
    int rowsAffected=0; 
    String strSQL = "INSERT INTO item VALUES (sc_item_item_id_seq.NEXTVAL," + this.getCategoryId() + ",'" + this.getItemName() + "','" + this.getItemDesc() + "'," + this.getUnitPrice() + "," + this.getUnitStock() + ")"; 
    DataAccess DA = new DataAccess(); 
    rowsAffected = DA.modifyDatabase(strSQL); 
    return rowsAffected; 
} 

のように私は、Number型のデータベースのフィールドに整数を入力しようとしています。これは実現可能か、間違っていますか?

また、別のテーブルで問題なく動作していますが、そのテーブルは文字列を取り入れているだけです。

ご協力いただければ幸いです。

ありがとうございます!

編集:ここでは

はエラーです:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at javagui.views.frmItem.addItem(frmItem.java:243) 
at javagui.views.frmItem$1.actionPerformed(frmItem.java:101) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+1

例外がスローされた場合は、そのスタックトレースを表示します。また、準備された文を使用してください。http://docs.oracle.com/javase/tutorial/jdbc/basics/preparedhtml –

+0

ItemNameまたはitemDescフィールドに引用符などの不適切な文字が含まれていますか? –

答えて

1

はい、あなたは正しくそれをやっています。引用符なしで数値型の値を挿入します。しかし、で行っているInteger.parseInt()からエラーが発生していると思います。 intにパースしようとしているすべての文字列に問題がないことを確認してください。また、Integer.parseInt()ステートメントをtry/catch(NumberFormatException)ブロックに入れて、これらの変換エラーをキャッチする必要があります。

また、あなたが探している例外に対してtry/catchを実行しているので、関数ヘッダーに何がスローされるかを指定する必要はありません。それは上位レベルの呼び出し関数に "ねえ、これらの例外を投げるかもしれないので、あなたはそれらをキャッチする必要があります。"

+0

+1!私は例外を完全に忘れてしまった。私はあなたのものを汚染しないように私の答えを削除:)素敵なキャッチ。おかげさまで – GETah

+0

私はtry/catch(NumberFormatException)を追加し、エラーをキャッチしているようです。私が見ていることから、私は変換されている文字列に誤りのある文字があるとは思わない。私は試し続けます。 :) – HMFlol

+0

私はそれをキャッチしました。 ItemIdフィールドを空白のままにしました。データベースに挿入するときにitem_idを生成するシーケンスがあるためです。 – HMFlol

0

スタックトレースを読んで理解してください。

これは、問題は、入力文字列""NumberFormatExceptionであることを示しています:Integer.parseIntを呼び出すときに起こっ

java.lang.NumberFormatException: For input string: "" 

、:あなたのクラスfrmItemの方法addItem

at java.lang.Integer.parseInt(Unknown Source) 

ラインで、ファイルfrmItem.javaの243:

at javagui.views.frmItem.addItem(frmItem.java:243) 

したがって、データベースとは何の関係もありません。空のStringをparseIntに渡しています。エラーメッセージやスタックトレースは本当に便利です。それらを読んで理解する必要があります。

+0

ありがとうございます。私はまだJavaにとって非常に新しいです。それは非常に役に立ちます。私は将来それを探します。 – HMFlol

関連する問題