在使用从结果集中提取的值之前,我需要检查它是否为NULL。 我找到了这个解决方案
int value = 0;
ResultSet rs = stmt.executeQuery(query);
if (rs.next()) {
value = rs.getInt("FIELD");
if (!rs.wasNull()) {
// use NOT NULL field value
}
}
但我需要直接检查字段值,而不需要为变量分配值,因为数据类型事先是未知的。
为了更好地解释目标,这里是我的代码:
Method method_one = null, methodResultSet=null;
switch(field_type){
case "int":
method_one = clazzAbstractClass.getDeclaredMethod("setValue_INT", short[].class,String.class,int.class);
break;
case "float":
method_one = clazzAbstractClass.getDeclaredMethod("setValue_FLOAT", short[].class,String.class,float.class);
break;
case "double":
method_one = clazzAbstractClass.getDeclaredMethod("setValue_DOUBLE", short[].class,String.class,double.class);
break;
}
methodResultSet = clazzResultSet.getDeclaredMethod("get"+field_type.substring(0, 1).toUpperCase() + field_type.substring(1), String.class); // e.g. rs.getInt
// current call with NO CHECK on NULL
method_one.invoke(my_object, methodResultSet.invoke(rs, FIELD_NAME);
简单来说,这段代码创建了一个类似于以下内容的东西:
my_object.setValue_INT(rs.getInt("FIELD"))
注意:getInt函数对于NULL值使用0作为默认值。
我的目标是直接将字段值或NULL作为setValue_INT函数的参数。
if(rs.getObject(NAME) != null) methodAbstractClass.invoke(my_object, methodResultSet.invoke(rs, NAME); else methodAbstractClass.invoke(my_object, null);
- Fab