java - 将 String 正确转换为 int 以插入字段类型为 Number 的 SQL 数据库时遇到问题

标签 java sql

我正在尝试使用 java 创建的表单将条目插入数据库。我可以毫无问题地从数据库中进行选择,但在插入时遇到困难。我认为问题在于我没有正确转换整数,或者 SQL 可能没有将 int 接收到 Number 字段中。我不知道。我不断收到“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() 。请检查您尝试解析为整数的所有字符串是否有错误。您还应该将这些 Integer.parseInt() 语句放入 try/catch(NumberFormatException) block 中,以捕获这些转换错误。

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

关于java - 将 String 正确转换为 int 以插入字段类型为 Number 的 SQL 数据库时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363501/

相关文章:

mysql - 从多个相同的 mysql 表中获取信息

sql - 从两个不相关的表中选择不相关的列

使用 FileInputStream 时出现 Java UnsupportedAudioFileException

java - 如何使用 spring bean 执行方法

java - 为什么compileJava实际上被跳过了?

SQL Server 内存消耗

mysql - 计算特定日期具有相同列值的行数

sql - 计算PostgreSQL中2个日期之间的工作时间

java - 依赖倒置原则(适用于 Java)

java - 静态函数返回错误值?