Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串正确转换为int以插入具有数字字段类型的SQL数据库时遇到问题_Java_Sql - Fatal编程技术网

Java 将字符串正确转换为int以插入具有数字字段类型的SQL数据库时遇到问题

Java 将字符串正确转换为int以插入具有数字字段类型的SQL数据库时遇到问题,java,sql,Java,Sql,我试图使用java创建的表单将条目插入数据库。我能够从数据库中进行选择,没有问题,但在插入数据库时遇到困难。我认为问题在于我没有正确地转换整数,或者SQL没有将整数转换为数字字段。我不确定。我一直收到一个“AWT-EventQueue-0”错误,但它没有指定位置 以下是我用于转换输入文本的代码片段: public void addItem() throws ClassNotFoundException, SQLException{ Item i1; DataAccess DA =

我试图使用java创建的表单将条目插入数据库。我能够从数据库中进行选择,没有问题,但在插入数据库时遇到困难。我认为问题在于我没有正确地转换整数,或者SQL没有将整数转换为数字字段。我不确定。我一直收到一个“AWT-EventQueue-0”错误,但它没有指定位置

以下是我用于转换输入文本的代码片段:

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)

是的,你做得对;插入不带引号的数字类型值。但是,我相信您的错误来自您在
addItem()
中执行的
Integer.parseInt()
。请检查您试图解析为int的所有字符串是否都没有错误。您还应该将这些
Integer.parseInt()
语句放入
try/catch(NumberFormatException)
块中,以捕获这些转换错误


另外,由于您正在对正在查找的异常执行
try/catch
,因此不需要指定函数在函数头中抛出的内容。也就是说,告诉上层调用函数“嘿,我可能会抛出这些异常,因此您需要捕获它们。”

尝试阅读并理解堆栈跟踪

它告诉您问题在于输入字符串的
数字格式异常

,在调用Integer.parseInt时发生:

at java.lang.Integer.parseInt(Unknown Source)
在类
frmItem
的方法
addItem
中,在文件frmItem.java的第243行:

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

因此,它与数据库无关:您正在向
parseInt
传递一个空字符串。错误消息和堆栈跟踪非常有用:您必须阅读它们并尝试理解它们。

如果引发异常,请向我们显示其堆栈跟踪。请使用准备好的语句:ItemName或itemDesc字段是否包含不友好的字符,如引号?+1!我完全忘记了例外情况。为了不污染你的答案,我删除了我的答案:)捕捉得好。谢谢。我添加了try/catch(NumberFormatException),它似乎正在捕获错误。从我看到的情况来看,我认为正在转换的字符串中没有任何错误字符。我会继续努力。:)我抓住了。我将ItemId字段留空,因为我有一个序列,可以在插入数据库时为我生成ItemId。谢谢。我对Java还是很陌生。那很有帮助。我以后会找的。
at javagui.views.frmItem.addItem(frmItem.java:243)