按照置顶的贴子中的要求重述一遍问题:
环境:oracle,weblogic
问题:要保存页面上的内容为date型,而这个date型必须精确到时分.
直接update ... to_date('2003-08-05 11:30','YYYY-MM-DD HH24:MI')可以,但现在由于某种原因,必须使用PreparedStatement准备sql,再设置各个字段值.
请问我这种情况,如何操作?PreparedStatement.setDate() or setTime() or another way?
谢谢

解决方案 »

  1.   

    java.text.SimpleDateFormat dateAndTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm");
       String currDateAndTime = dateAndTimeFormat.format(new java.util.Date());
      

  2.   

    String sql = "update table set xx字段(date) = to_date(:dateString, 'YYYY-MM-DD HH24:MI') where ..."; 
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString("dateString", 字符形式的时间);
    pstmt.execute()
      

  3.   

    如果再sql文中写好date的格式的话,setDate,setTime,setString都可以吧?
      

  4.   

    java.text.SimpleDateFormat dateAndTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh24:mm");
       String currDateAndTime = dateAndTimeFormat.format(new java.util.Date());
      

  5.   

    谢谢各位!
    genphone_ru(哎,什么都要学,真累) :日期字符串格式化不是难事,只是不知道如何保存到oracle中.
    ashes(灰尘) :PreparedStatement中各字段值是先以?初始化的,然后再用setXxx之类设置实际值,因为是在做公用类.
    zhousm6([email protected]) :这三个都试了,都失败了,郁闷ing...
      

  6.   

    刚才试了setString()用to_date,提示错误:
    java.sql.SQLException: ORA-01858: 在要求输入数字处找到非数字字符
      

  7.   

    应该是在你的update语句前设置好Oracle接收的时间格式,再执行update语句。设置Oracle的时间格式的oracle方法我记不清了
    比如是:setTimeFormat("yyyy-MM-dd hh24:mm");
    那SQL语句就是:
    String sql = "setTimeFormat(\"yyyy-MM-dd hh24:mm\");";
    sql += "update .......;";
    PreparedStatement pstmt = conn.prepareStatement(sql);
      

  8.   

    用java.sql.Timestamp
    pstmt.setTimestamp(1, java.sql.Timestamp.valueOf("2003-08-05 11:30" + ":00"));
      

  9.   

    yaray(雅睿) :名字起的不错
    相关命令应该是SET DATESTYLE,但好像没用。
    其实问题归结赶来是这样的:
    PreparedStatement怎么设置datetime型(从字面上看,只有setDate()和setTime())
      

  10.   

    时间戳?好的,试试!谢谢ashes(灰尘)
      

  11.   

    谢谢你对我的名字的赞赏!其实我所说的只是一种构思,你看一下我的部分代码你就会明白的:
    ---------------------------------------------------------------------
      StringBuffer sql = new StringBuffer("declare @max_mid integer;declare @max_mserialno integer;");
      sql.append("set @max_mid=(select max(M_ID)+1 from S_T_Menu);");
      sql.append("set @max_mserialno = (select max(M_SerialNO)+1 from S_T_Menu where M_ParentMenuID="+M_ParentMenuID+");");
      sql.append("if(@max_mserialno is null) set @max_mserialno=1;");
      sql.append("insert into S_T_Menu(M_ID,M_isSubMenu,M_ParentMenuID,M_CNName,M_EnName,M_URL,M_TargetFrameName,M_SerialNO)");
      sql.append("values(@max_mid,1,?,?,?,?,?,@max_mserialno);");  PreparedStatement pstmt = pdb.getPrepareStatement(sql.toString());  pstmt.setString(1,M_ParentMenuID);
      pstmt.setString(2,M_CNName);
      pstmt.setString(3,M_EnName);
      pstmt.setString(4,M_URL);
      pstmt.setString(5,M_TargetFrameName);
      pstmt.execute();
      //以上在SQL Server 2000下有效。
    ---------------------------------------------------------------------
    我想说的就是:
      不用PreparedStatement的时间格式设置,而是直接采用Oracle的时间格式设置;
      pstmt.execute()可以执行多句sql语句.
      

  12.   

    pstmt.setTimestamp(1, new Timestamp(date.getTime()));
    Timestamp 精确到秒
      

  13.   

    谢谢各位的热情支持!问题已经解决。还没试时间戳的方法,重新做了一个类拼SQL语句,就像yaray(雅睿) 的构思一样,找个另外的方法实现。
    再次谢谢大家!结贴!