将数据类型 varchar 转换为 numeric 时出错 (SQL SERVER 2000) 应该怎样解决 
public void tianjiaXS() {// 添加学生信息
        xueshengInfo = new String[8];//学生信息放在数组了
        for (int i = 0; i < xueSheng.length; i++) {
            //输入的是学生的班级名称,但是存储的时候存的是班级的编号,
            //这样就要根据班级名称从班级表里得到相应的班级编号,再将班级编号插入学生表里
            
            //xueshengInfo[2]为班级名称的值,测试结果为null(班级名称是存在的,用下拉框之前是没问题)
            //comboBox.getSelectedItem(),从下拉框里得到班级名称,正常,为班级名称
            if (i == 2) {            
                try {
                    xueshengInfo[2] = (dbo
                            .selectInfo("select * from banji where banjiming='"
                                    + comboBox.getSelectedItem() + "'"))
                            .getString(1);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } else {
                xueshengInfo[i] = (xueSheng[i].getText()).trim();
            }        
        }
        System.out.println(comboBox.getSelectedItem());//测试comboBox.getSelectedItem(),正常,为班级名称
        System.out.println(xueshengInfo[2]);//测xueshengInfo[2]的值,为null(班级名称是存在的)
        
        tjxsxxSQL = "insert into xuesheng(xsbianhao,xsxinming,banjihao,xsxinbie,xsnianling,xsjiatingzhuzhi,xsruxueshijian,xsruxuechengji) values('"
                + xueshengInfo[0]
                + "','"
                + xueshengInfo[1]
                + "','"
                + xueshengInfo[2]
                + "','"
                + xueshengInfo[3]
                + "','"
                + xueshengInfo[4]
                + "','"
                + xueshengInfo[5]
                + "','"
                + xueshengInfo[6] + "','" + xueshengInfo[7] + "')";        dbo.updateInfo(tjxsxxSQL);// 执行添加SQL语句
    }
注:
除了学生年龄xsnianling(xueshengInfo[4])是short int, 其余都是字符型另外请注意下面的打印测试:
System.out.println(comboBox.getSelectedItem());//测试comboBox.getSelectedItem(),正常,为班级名称
System.out.println(xueshengInfo[2]);//测xueshengInfo[2]的值,为null(班级名称是存在的)

解决方案 »

  1.   

    java技术交流群100756746,希望大家加入,我们共同讨论,共同进步!
      

  2.   

     Object getSelectedItem() 
              返回当前所选项。  public void print(Object obj) {
    write(String.valueOf(obj));
        }你看下是不是这个原因.
    sql中的getSelectedItem()加上toString()试试.
      

  3.   

    xueshengInfo[2] = (dbo.selectInfo("select banjihao from banji where banjiming='"
                                        + comboBox.getSelectedItem() + "'"))
                                .getString(1);
      

  4.   


    之前我也是按这样写的,不行,
    问题出在comboBox.getSelectedItem()(从下拉框中得到班级名) ,这里得到班级名称正常(打印出来没问题)但是用这个班级名称去查找班级编号的时候就有问题,得到的班级编号为null(班级存在),如果将下拉框(JComboBox)改为文本框输入,就不会有问题问题应该就出在 拿下拉框里得到的值,去数据库里查询相应的班级编号,得到的班级编号为null
    另外
    sql中的getSelectedItem()加上toString()我也用过,不行.
      

  5.   

    你应该打印下sql,看看有没有问题String banjiming =  comboBox.getSelectedItem();
    System.out.println(banjiming);
    String sql = "select banjihao from banji where banjiming='" + banjiming + "'";
    System.out.println(sql);
    xueshengInfo[2] = (dbo.selectInfo(sql)).getString(1); 
      

  6.   


    String banjiming =  (String) comboBox.getSelectedItem(); 
    System.out.println(banjiming); 
    String sql = "select banjihao from banji where banjiming='" + banjiming + "'"; 
    System.out.println(sql); 
    try {
    xueshengInfo[2] = (dbo.selectInfo(sql)).getString(1);
    } catch (SQLException e) {
    e.printStackTrace();

    打印结果为:
    历史07-1
    select banjihao from banji where banjiming='历史07-1'
    执行insert into xuesheng(xsbianhao,xsxinming,banjihao,xsxinbie,xsnianling,xsjiatingzhuzhi,xsruxueshijian,xsruxuechengji) values('XS0020138','春哥','null','男','25','广东省','2007-9-12','573')语句失败!
      

  7.   

    String banjiming =  (String) comboBox.getSelectedItem(); 
            System.out.println(banjiming); 
            String sql = "select banjihao from banji where banjiming='" + banjiming + "'"; 
            System.out.println(sql); 
            try {
                xueshengInfo[2] = (dbo.selectInfo(sql)).getString(1);
                System.out.println(xueshengInfo[2]);
            } catch (SQLException e) {
                e.printStackTrace();
            }   
      

  8.   

    可能是你的dbo.selectInfo(sql)有问题
      

  9.   


    String sql = "select banjihao from banji where banjiming='" + banjiming + "'"; 
    System.out.println(sql); //结果为 select banjihao from banji where banjiming='历史07-1'将select banjihao from banji where banjiming='历史07-1'
    复制,粘帖到查询分析器里得到要查询的班级号(正常)另外: 
    System.out.println(xueshengInfo[2]); 
    结果为:null
      

  10.   

    dbo.selectInfo(sql)方法返回的应该是String
    不应该是ResultSet
      

  11.   

    查询数据库的,返回的是ResultSet
      

  12.   


    感谢关心我问题的所有人,这个问题已经被我解决了,呵呵问题就出在下面这句:xueshengInfo[2] = (dbo
                                .selectInfo("select * from banji where banjiming='"
                                        + comboBox.getSelectedItem() + "'"))
                                .getString(1);因为查询完数据库之后,数据库游标(ResultSet)是指向第一行之前的,就是说不是指向第一行的,
    所以得到的值为null,游标向下移动一行再取值就对了
    即ResultSet rs;
    if(rs.next){
    xueshengInfo[2]=rs.getString(1);}