将数据类型 varchar 转换为 numeric 时出错

xiaohuanjie 2009-12-15 07:55:35
将数据类型 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(班级名称是存在的)



...全文
171 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuanjie 2009-12-15
  • 打赏
  • 举报
回复
查询数据库的,返回的是ResultSet
swandragon 2009-12-15
  • 打赏
  • 举报
回复
dbo.selectInfo(sql)方法返回的应该是String
不应该是ResultSet

xiaohuanjie 2009-12-15
  • 打赏
  • 举报
回复

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


swandragon 2009-12-15
  • 打赏
  • 举报
回复
可能是你的dbo.selectInfo(sql)有问题
swandragon 2009-12-15
  • 打赏
  • 举报
回复
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();
}
xiaohuanjie 2009-12-15
  • 打赏
  • 举报
回复

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')语句失败!
swandragon 2009-12-15
  • 打赏
  • 举报
回复
你应该打印下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);
苍蝇①号 2009-12-15
  • 打赏
  • 举报
回复
用PrepareStatement传参吧
xiaohuanjie 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 swandragon 的回复:]
xueshengInfo[2] = (dbo.selectInfo("selectbanjihao from banji where banjiming='"
                                    + comboBox.getSelectedItem() + "'"))
                            .getString(1);

[/Quote]

之前我也是按这样写的,不行,


问题出在comboBox.getSelectedItem()(从下拉框中得到班级名) ,这里得到班级名称正常(打印出来没问题)

但是用这个班级名称去查找班级编号的时候就有问题,得到的班级编号为null(班级存在),

如果将下拉框(JComboBox)改为文本框输入,就不会有问题

问题应该就出在 拿下拉框里得到的值,去数据库里查询相应的班级编号,得到的班级编号为null


另外
sql中的getSelectedItem()加上toString()我也用过,不行.
swandragon 2009-12-15
  • 打赏
  • 举报
回复
xueshengInfo[2] = (dbo.selectInfo("select banjihao from banji where banjiming='"
+ comboBox.getSelectedItem() + "'"))
.getString(1);
365810247 2009-12-15
  • 打赏
  • 举报
回复


Object getSelectedItem()
返回当前所选项。

public void print(Object obj) {
write(String.valueOf(obj));
}

你看下是不是这个原因.
sql中的getSelectedItem()加上toString()试试.

999朵玫瑰 2009-12-15
  • 打赏
  • 举报
回复
varchar
Trinx 2009-12-15
  • 打赏
  • 举报
回复
java技术交流群100756746,希望大家加入,我们共同讨论,共同进步!
xiaohuanjie 2009-12-15
  • 打赏
  • 举报
回复

感谢关心我问题的所有人,这个问题已经被我解决了,呵呵

问题就出在下面这句:

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);

}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧