我有以下课程,当我运行它时,我收到一个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "com.mysql.jdbc.JDBC4ResultSet@42147df5"
此行发生错误:
fono = Integer.valueOf(fonoS);
这是代码:
public Counter(){
String query = "SELECT MAX(FONO) from forders";
try {
connectOrders.pst = connectOrders.con.prepareStatement(query);
connectOrders.rs = connectOrders.pst.executeQuery(query);
if (connectOrders.rs.next()){
Object fonoO = connectOrders.rs;
String fonoS= fonoO.toString();
fono = Integer.valueOf(fonoS);
try {
serialisationFoNo(fono);
} catch (IOException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (connectOrders.rs.wasNull()){
fono = 1;
try {
serialisationFoNo(fono);
} catch (IOException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (SQLException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, ex);
}
}
为什么抛出这个异常我在应用程序的其他地方使用了相同的代码语法并且它可以工作。
注意:我也尝试过使用Integer.parseInt();但即使这样也会引发类似的例外。
答案 0 :(得分:1)
您不从结果集中提取整数。首先将SQL更改为
"SELECT MAX(FONO) as m from forders"
并使用
rs.getInt("m");
来自结果集
答案 1 :(得分:1)
ResultSet包含所有列值,您可以按列索引(从1开始计数)或名称获取。
同样对于PreparedStatement,不会添加query
参数,这是在准备时完成的。
connectOrders.rs = connectOrders.pst.executeQuery();
//String fonoS= rs.getString(1);
fono = rs.getInt(1);
关闭ResultSet和语句。
答案 2 :(得分:0)
我猜connectOrders.rs是一个ResultSet变量
您要将那个转换为字符串,然后转换为错误的整数
结果集包含整行数据(是一种容器),您可能希望获取其中一个值并将该值转换为字符串/整数,如此
int x = connectOrders.rs.getInt(1); //get first field from the ResultSet
答案 3 :(得分:0)
您正在将ResultSet对象转换为String,然后解析它。相反,您的代码应该是
int fono = connectOrders.rs.getInt(1);
完整适用的代码
public Counter(){
String query = "SELECT MAX(FONO) from forders";
try {
connectOrders.pst = connectOrders.con.prepareStatement(query);
connectOrders.rs = connectOrders.pst.executeQuery(query);
if (connectOrders.rs.next()){
//***********your code change here
//Object fonoO = connectOrders.rs;
// String fonoS= fonoO.toString();
// fono = Integer.valueOf(fonoS);
fono = connectOrders.rs.getInt(1);
//**************
try {
serialisationFoNo(fono);
} catch (IOException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (connectOrders.rs.wasNull()){
fono = 1;
try {
serialisationFoNo(fono);
} catch (IOException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (SQLException ex) {
Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, ex);
}
}
答案 4 :(得分:0)
您正在尝试将整个结果集转换为无效的整数
Object fonoO = connectOrders.rs;
String fonoS= fonoO.toString();
fono = Integer.valueOf(fonoS);
您可以使用
从结果集中获取您认为在这些行上为整数的列String id = rs.getString(1);//if max(fono) in db is char but can be represented as integer or if its an int field you could do getInt("id") and store it in integer rather than string.
Integer idValue = Integer.valueOf(id);
答案 5 :(得分:-1)
使用调试器。
显然,fonOS
的值在该实例中无法解析为Integer
。
来自API:
字符串中的字符必须都是指定基数的数字 (由Character.digit(char,int)返回一个确定 非负值),但第一个字符可能是ASCII 减号' - '('\ u002D')表示负值或ASCII 加号'+'('\ u002B')表示正值。