[sqlite MISMATCH]:​​数据类型不匹配

时间:2017-03-26 10:19:20

标签: java sqlite jdbc types mismatch

我在将数据插入数据库时​​遇到sqlite不匹配异常。我在netbeans中创建应用程序但是当我尝试通过单击按钮选择文本字段来更新数据库时显示此异常。

Here's the screenshot

private void calculationDBActionPerformed(java.awt.event.ActionEvent evt) {                                              

      String sql2 = "Insert into Calculation_Info (prodID,item_name,net_amount,tax_rate,Amt_Of_Product,Grand_Total) values(?,?,?,?,?,?)";
      try{

        pst = conn.prepareStatement(sql2);

        pst.setString(1, prodID.getText());
        pst.setString(2, txtPRoduct.getText());
        pst.setString(3, txtTotal.getText());
        pst.setString(4, txtTaxTotal.getText());
        pst.setString(5, txtAmountTotal.getText());
        pst.setString(6, txtGrandTotal.getText());

        pst.execute();
        JOptionPane.showMessageDialog(null, "Gotcha Bro!");
        pst.close();
        rs.close();
      }catch(Exception exc){
          JOptionPane.showMessageDialog(null, exc);
      }
    }  

2 个答案:

答案 0 :(得分:1)

您无法为String实际类型设置Int,因为您遇到此类错误,因此您必须将输入转换为正确的类型,例如:

prodID.getText()应该是一个int而不是一个String,所以你必须这样使用它:

pst.setInt(1, Integer.parseInt(prodID.getText()));
//--^^^^^----------^^convert your String to int and change setString to setInt

其余的一样。

答案 1 :(得分:1)

@YCF_L正确解释了问题。我相信你有@Muhammad Quanit的问题是你不了解你的查询要求的内容以及你想要传递给查询的内容。 要为您分解,您的查询:

"Insert into Calculation_Info (prodID,item_name,net_amount,tax_rate,Amt_Of_Product,Grand_Total) values(?,?,?,?,?,?)"

需要提供6个值(请注意每个值的类型):

  1. prodID(int)
  2. item_name(String)
  3. net_amount(double)
  4. tax_rate(BigDecimal)
  5. Amt_Of_Product(int)
  6. Grand_Total(BigDecimal)
  7. 在你的程序中,当你调用方法时,你有6个文本框可以获得这些值以便放入HOWEVER:getText()它返回String类型。因此,当我们尝试将String prodID = "3"放入我们的SQL查询时,您将收到最初收到的错误:数据类型不匹配。现在您当前的问题是:java.lang.numberFormatException:用于输入String。这意味着您正在尝试将String值转换为数字;但它失败了。那可能是什么原因呢?嗯......

    /* Lets say I have a string with value 4.7*/
        String s = "4.7";
    /* Lets try to parse this using parseInt method*/
        Integer.parseInt(s); //NumberFormatException -- because 4.7 cannot be converted into an int
    /* How about if my string was a word/phrase?*/
        String s = "foo";
    /* Attempt to parse...*/
        Integer.parseInt(s); //NumberFormatException -- because "foo" cannot be converted into integer
        Double.parseDouble(s); //NumberFormatException -- because "foo" cannot be converted into a double
    

    正如您所看到的,您必须非常小心并跟踪您正在转换和传递到查询中的内容(反之亦然)。

    正如@YCF_L所提到的,也许您的String在开头或结尾包含空格。 trim()类中有一个名为String的方法可以帮助您。

    /* Let's call the getText() method to obtain our string */
        String s = item_name.getText(); // s = "    Foo Bar " 
    /* NOTE: the white spaces (' ') BEFORE and AFTER the String we want*/
        System.out.println(s.trim()); // Prints out "Foo Bar"
    

    因此String OBJECT有一个名为trim()的方法,它摆脱了TRAILING和LEADING白色空格,但两者之间没有白色空格。因此,我们不会获得" Foo Bar ",而是获得"Foo Bar"

    我赞成了@YCF_L的回答 - 他值得赞扬。我只是想让你理解这个概念,因为你在解释之后仍然感到困惑,然后接收到NumberFormatException。

    编辑以包含评论中提到的trim()方法。