【问题标题】:Columns of type integer cannot hold values of type char整数类型的列不能保存 char 类型的值
【发布时间】:2016-05-20 17:15:36
【问题描述】:

我的数据库中有一个名为BENEFICTOR 的表。当我尝试插入此表时,它给了我以下错误:

整数类型的列不能保存 char 类型的值,我在文本字段(T1、T2、...)中输入了一个真值。

private void Add_PeopleActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:

    int bid=Integer.parseInt(T1.getText());
    int fid=Integer.parseInt(T2.getText());
    int idnum=Integer.parseInt(T5.getText());
    int age = Integer.parseInt(T14.getText());
    try{
        String url="jdbc:derby://localhost:1527/spc";
        String username="issam";
        String password="issam";
        Connection con=DriverManager.getConnection(url,username,password);
        Statement stmt=con.createStatement();

        String Query="INSERT INTO BENEFICTOR (BID,FID,FULL_NAME,GENDER,AGE,IDNUM,STATUS,ORIGINAL_AREA,RECENT_AREA,EVAL,PHONE_NUMBER1,PHONE_NUMBER2,SITUATION,VISIT) VALUES ("+bid+" , "+fid+" , '"+T3.getText().toString()+"' , '"+T4.getSelectedItem().toString()+"' , "+age+" , "+idnum+" , '"+T6.getSelectedItem().toString()+"' , '"+T7.getText().toString()+"' , '"+T8.getText().toString()+"' , '"+T9.getSelectedItem().toString()+"' , '"+T10.getText().toString()+"' , '"+T11.getText().toString()+"' , '"+T12.getText().toString()+"' , '"+T13.getText().toString()+"')";
        stmt.executeUpdate(Query);
        JOptionPane.showMessageDialog(null,"A Person Added To Database");
        T1.setText(null);
        T2.setText(null);
        T3.setText(null);
        T4.setSelectedItem(0);
        T5.setText(null);
        T6.setSelectedItem(0);
        T7.setText(null);
        T8.setText(null);
        T9.setSelectedItem(0);
        T10.setText(null);
        T11.setText(null);
        T12.setSelected(true);
        T13.setSelected(true);
        T14.setText(null);

    }
    catch(SQLException ex){
        JOptionPane.showMessageDialog(null, ex.toString());
    }
}   

谁能告诉我如何解决这个问题?谢谢。

这是列字段的类型:

BID:INTEGER,FID:INTEGER,FULL_NAME:VARCHAR,GENDER:VARCHAR,AGE:INTEGER,IDNUM:INTEGER,STATUS:VARCHAR,ORIFINAL_AREA:VARCHAR,RECENT_AREA:VARCHAR,EVAL:VARCHAR,PHONE_NUMBER1:INTEGER,PHONE_NUMBER2:INTEGER,SITUATION:VARCHAR,VISIT:VARCHAR

StatusGendreeval 都是 ComboBoxes。 visitSituation 是复选框

【问题讨论】:

  • 可以分享一下 Benefictor 桌子模型吗?您也可以尝试使用 PreparedStatement 和 setInt 函数来添加参数吗? docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
  • 请检查您通过调用.toString()插入数据的列类型。我的意思是您在Status列中插入数据就像T6.getSelectedItem().toString()一样。请检查Status 的类型是否真的是 char 类型。请检查您使用 .toString() 插入数据的其他列的类型。
  • 你在这里要求人们玩猜谜游戏。请提供一个最小、完整、可验证的示例:stackoverflow.com/help/mcve

标签: java


【解决方案1】:

如果您尝试将char 值存储在java.lang.Integer 类型的变量中,您需要像Integer.parseInt(String.valueOf(c)) 一样解析它们,其中c 是您的char 值。 或者您可以将变量类型更改为Object,然后使用包装类型java.lang.Integerjava.lang.Character 来存储数据

【讨论】:

  • 我正在像 Integer.parseInt 一样解析它们 .. 在我的代码中问题出在哪里?
【解决方案2】:

可能列 PHONE_NUMBER1 和 PHONE_NUMBER2 是 int 类型,而您正试图在其中插入一个字符串。 尝试按照解析其他 int 值的方式解析电话号码:

int phoneNumber1 = Integer.parseInt(T10.getText());
int phoneNumber2 = Integer.parseInt(T11.getText());

您的查询应如下所示:

String Query="INSERT INTO BENEFICTOR (BID,FID,FULL_NAME,GENDER,AGE,IDNUM,STATUS,ORIGINAL_AREA,RECENT_AREA,EVAL,PHONE_NUMBER1,PHONE_NUMBER2,SITUATION,VISIT) VALUES ("+bid+" , "+fid+" , '"+T3.getText().toString()+"' , '"+T4.getSelectedItem().toString()+"' , "+age+" , "+idnum+" , '"+T6.getSelectedItem().toString()+"' , '"+T7.getText().toString()+"' , '"+T8.getText().toString()+"' , '"+T9.getSelectedItem().toString()+"' , "+phoneNumber1+" , "+phoneNumber2+" , '"+T12.getText().toString()+"' , '"+T13.getText().toString()+"')";

【讨论】:

  • 我修好了,还是一样的问题
  • 看看你的描述应该可以解决它,因为 PHONE_NUMBER1 和 PHONE_NUMBER2 确实是整数类型。您能否更新问题中的代码?
猜你喜欢
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2023-01-23
相关资源
最近更新 更多