oracle,用PreparedStatement更新数据库,date型字段精确到分,应该如何操作?

skysaint 2003-08-05 11:22:35
如题.date型只是精确到日期的会,用java.sql.Date.valueOf(String)转换再让PreparedStatment.setDate().但如果要保存到小时时和分钟,就不知如何操作了,求各位指点.
...全文
1132 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skysaint 2003-08-05
  • 打赏
  • 举报
回复
谢谢各位!
genphone_ru(哎,什么都要学,真累) :日期字符串格式化不是难事,只是不知道如何保存到oracle中.
ashes(灰尘) :PreparedStatement中各字段值是先以?初始化的,然后再用setXxx之类设置实际值,因为是在做公用类.
zhousm6(zhousm6@hotmail.com) :这三个都试了,都失败了,郁闷ing...
leier1979 2003-08-05
  • 打赏
  • 举报
回复
java.text.SimpleDateFormat dateAndTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh24:mm");
String currDateAndTime = dateAndTimeFormat.format(new java.util.Date());
zhousm6 2003-08-05
  • 打赏
  • 举报
回复
如果再sql文中写好date的格式的话,setDate,setTime,setString都可以吧?
ashes 2003-08-05
  • 打赏
  • 举报
回复
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()


票票飞扬 2003-08-05
  • 打赏
  • 举报
回复
java.text.SimpleDateFormat dateAndTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm");
String currDateAndTime = dateAndTimeFormat.format(new java.util.Date());
skysaint 2003-08-05
  • 打赏
  • 举报
回复
按照置顶的贴子中的要求重述一遍问题:
环境: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?
谢谢
skysaint 2003-08-05
  • 打赏
  • 举报
回复
谢谢各位的热情支持!问题已经解决。还没试时间戳的方法,重新做了一个类拼SQL语句,就像yaray(雅睿) 的构思一样,找个另外的方法实现。
再次谢谢大家!结贴!
sunrain_gao 2003-08-05
  • 打赏
  • 举报
回复
pstmt.setTimestamp(1, new Timestamp(date.getTime()));
Timestamp 精确到秒
yaray 2003-08-05
  • 打赏
  • 举报
回复
谢谢你对我的名字的赞赏!

其实我所说的只是一种构思,你看一下我的部分代码你就会明白的:
---------------------------------------------------------------------
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语句.
skysaint 2003-08-05
  • 打赏
  • 举报
回复
时间戳?好的,试试!谢谢ashes(灰尘)
skysaint 2003-08-05
  • 打赏
  • 举报
回复
yaray(雅睿) :名字起的不错
相关命令应该是SET DATESTYLE,但好像没用。
其实问题归结赶来是这样的:
PreparedStatement怎么设置datetime型(从字面上看,只有setDate()和setTime())
ashes 2003-08-05
  • 打赏
  • 举报
回复
用java.sql.Timestamp
pstmt.setTimestamp(1, java.sql.Timestamp.valueOf("2003-08-05 11:30" + ":00"));
yaray 2003-08-05
  • 打赏
  • 举报
回复
应该是在你的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);
skysaint 2003-08-05
  • 打赏
  • 举报
回复
刚才试了setString()用to_date,提示错误:
java.sql.SQLException: ORA-01858: 在要求输入数字处找到非数字字符

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧