连接mysql数据库后,读取数据错误,mysql数据库连接没有错误,就是读取“lasttime”字段时出错!请高手指点下!package helloT;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class Db { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection con = null;
Statement sm =null;
ResultSet rs =null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost/mydb1";
con = DriverManager.getConnection(url,"root","mysql");
sm = con.createStatement();
rs = sm.executeQuery("select * from userinfo");
while(rs.next()){
System.out.println("hello "+rs.getString("name")+"!");
System.out.println("lasttime:"+rs.getLong("lasttime"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs!=null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(sm!=null){
try{
sm.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(con!=null){
try{
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}}
mysql版本:5.0
Eclipse 3.4在mysql的数据库mydb1中userinfo表的定义如下:
CREATE TABLE `userinfo` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `userid` varchar(45) NOT NULL,
  `name` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  `lasttime` datetime default '2009-03-22 00:00:00',
  `timtes` int(10) unsigned NOT NULL default '0',
  `re` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;表中有2行记录:如下
id userid name password lasttime timtes re 
-------------------------------------------------------------
1 benjamin Benjamin password 2009-03-22 00:00:00 0 benjamin 
2 yakoo5 yakoo5 password 2009-03-22 00:00:00 0 yakoo5 运行后的结果如下:
hello Benjamin!
java.sql.SQLException: Invalid value for getLong() - '2009-03-22 00:00:00'
at com.mysql.jdbc.ResultSet.getLong(ResultSet.java:1359)
at com.mysql.jdbc.ResultSet.getLong(ResultSet.java:1374)
at helloT.Db.main(Db.java:26)麻烦各位帮忙看下!

解决方案 »

  1.   

    用rs.getDate()啊。
    你lasttime都是datetime类型了,还用long做啥。
      

  2.   

    你的DB里lasttime的类型是datetime类型,而你用rs.getLong("lasttime")取结果集,明显的类型不一致.用rs.getDate("lasttime");
      

  3.   

    其实这个例子是为了演示这个错误而写的。
    实际情况是有很多已经写好的类使用getLong()获取时间
    返回的是long型,
    愿意是希望在不修改原有类的情况下解决这个问题。以前设计的类有问题,已经改过来了,谢谢各位了!