【发布时间】:2014-05-30 18:59:52
【问题描述】:
我在java中使用以下方法从dob和当前日期计算年龄,dob存储在数据库表中,使用getter setter方法导出dob值并将dob传递给getAge1方法,方法查询在php myadmin mysql中运行良好控制台,当我将查询结果存储在结果集中时,它在 int age 变量中给出空值。
public int getAge1(int id,String dob)
{
try {
System.out.println("DOB is:"+dob);
System.out.println("Id is:"+id);
Connection conn = null;
conn = DbConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String s3 = "SELECT TIMESTAMPDIFF(YEAR,"+ dob +",CURDATE()) from custregister where cid="+ id ;
System.out.println("sql :"+s3);
ps = conn.prepareStatement(s3);
rs = ps.executeQuery();
while (rs.next())
{
int s2 =rs.getInt(1);
System.out.println("Age is "+s2);
age=s2;
}
}catch(Exception e){e.printStackTrace();}
//SELECT TIMESTAMPDIFF(YEAR, 'dob', CURDATE()) AS age;
return age;
}
【问题讨论】:
-
只执行语句...如果你使用preparedstatement pass 参数
id之后 -
尝试使用语句 executeQuery() 而不是preparedStatement,结果仍然是int null value 0
-
我没有收到任何错误,该值不是从结果集或查询中获取的形式
-
是的查询在执行为 SELECT TIMESTAMPDIFF(YEAR, dob,CURDATE()) from custregister where cid=101 时给出正确的结果;
-
简单地从数据库中选择值并在应用程序级别计算它不是更容易/更好吗?这允许更大的灵活性(例如,您需要其他日期,需要考虑语言环境,...)