各位大侠,我写了个程序,其中有部分涉及到了把系统当前时间录入到数据库中,我使用了PreparedStatement对象的setTimestamp(int Index, Timestamp ts, Calendar c)方法,但是执行了sql语句后发现时间没录进去值显示为null,下面是我写的这部分的代码,跪求高手指点下
PreparedStatement pstmt = DB.prepareStmt(conn, "insert into manager values (null, ?, ?, ?, ?, ?)");
  try {
  pstmt.setString(1, name);
  pstmt.setString(2, gender);
  pstmt.setString(3, item);
  pstmt.setInt(4, money);
  Calendar c = Calendar.getInstance();
  Timestamp ts = null;
  pstmt.setTimestamp(5, ts, c);

  pstmt.executeUpdate();
  } catch (SQLException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
  }
 
  ta.setText("数据记录成功");
 
  DB.close(pstmt, conn);

解决方案 »

  1.   


    setTimestamp
    void setTimestamp(int parameterIndex,
                      Timestamp x,
                      Calendar cal)
                      throws SQLException使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Timestamp 值。驱动程序使用 Calendar 对象构造一个 SQL TIMESTAMP 值,该值随后被驱动程序发送给数据库。利用 Calendar 对象,驱动程序可以在考虑自定义时区的情况下计算时间戳。如果没有指定任何 Calendar 对象,那么驱动程序将使用默认时区,该时区是运行应用程序的虚拟机所在的时区。 参数:
    parameterIndex - 第一个参数是 1,第二个参数是 2,……
    x - 参数值
    cal - 驱动程序将用来构造时间戳的 Calendar 对象 
    注意:第二参数x代表参数值,你传入的ts=null, 数据库中当然是null了
      

  2.   

    可是api文档不是说了用指定的Calendar对象构造一个Timestamp值么。
      

  3.   

    Calendar是用来指定时区的import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Timestamp;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimeZone;
    public class TestSql { public static void main(String[] args) {
    try {
    Class.forName("org.postgresql.Driver");
    Connection conn = DriverManager.getConnection(
    "jdbc:postgresql://192.168.233.11:5432/test","test","test");

    PreparedStatement pstmt = conn.prepareStatement("insert into test.table_a(name, time_str) values(?,?)");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date dateTime = sdf.parse("2012-10-29 11:00:00");
    Timestamp ts = new Timestamp(dateTime.getTime());

    // Test1
    pstmt.setString(1, "test1");
    pstmt.setTimestamp(2, ts);
    pstmt.executeUpdate();

    // Test2 wich Calendar
    TimeZone tz = TimeZone.getTimeZone("gmt"); 
    Calendar calendar = Calendar.getInstance(tz);

    pstmt.setString(1, "test2");
    pstmt.setTimestamp(2, ts, calendar);
    pstmt.executeUpdate();

    conn.close();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    } catch (ParseException e) {
    e.printStackTrace();
    } }}
    数据库结果如下: name  |               time_str               
    -------+--------------------------------------
     test1 | 2012-10-29 11:00:00.000000 +08:00:00
     test2 | 2012-10-29 03:00:00.000000 +00:00:00