将数据类型 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(班级名称是存在的)
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(班级名称是存在的)
返回当前所选项。 public void print(Object obj) {
write(String.valueOf(obj));
}你看下是不是这个原因.
sql中的getSelectedItem()加上toString()试试.
+ comboBox.getSelectedItem() + "'"))
.getString(1);
之前我也是按这样写的,不行,
问题出在comboBox.getSelectedItem()(从下拉框中得到班级名) ,这里得到班级名称正常(打印出来没问题)但是用这个班级名称去查找班级编号的时候就有问题,得到的班级编号为null(班级存在),如果将下拉框(JComboBox)改为文本框输入,就不会有问题问题应该就出在 拿下拉框里得到的值,去数据库里查询相应的班级编号,得到的班级编号为null
另外
sql中的getSelectedItem()加上toString()我也用过,不行.
System.out.println(banjiming);
String sql = "select banjihao from banji where banjiming='" + banjiming + "'";
System.out.println(sql);
xueshengInfo[2] = (dbo.selectInfo(sql)).getString(1);
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')语句失败!
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();
}
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
不应该是ResultSet
感谢关心我问题的所有人,这个问题已经被我解决了,呵呵问题就出在下面这句: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);}