往oracle中插入timestamp型数据

        我的方法源代码:

        public boolean addTickets(TicketsVo vo){
  boolean flag = false;
   //对应数据库中的date
  Timestamp stamp = DateConventer.strWithtimeToTimestamp(vo.getBeginTime());
  Object[] paramValues={vo.getTicketName(),vo.getStadiumId(),
    vo.getPrice(),vo.getDescn(),stamp}; //"sysdate"
  String executeSql = "insert into TB_Tickets (TicketID,TicketName," +
    "StadiumID,Price,Descn,BeginTime) values("+"seq_mp.nextval"+",?,?,?,?,?)";
    
  System.out.println("sql: "+executeSql);
  flag = this.updateZFSystemDB(executeSql, paramValues);
  return flag;
 }

 public static Timestamp strWithtimeToTimestamp(String str) {
    return Timestamp.valueOf(str);
  }

   就是上面这简单的程序折磨我一天,现将整个折磨过程记录下来:

   1、起初我的Object[] paramValues与 executeSql分别为:

       Object[] paramValues={vo.getTicketName(),vo.getStadiumId(),
    vo.getPrice(),vo.getDescn()};

        String executeSql = "insert into TB_Tickets (TicketID,TicketName," +
    "StadiumID,Price,Descn,BeginTime) values("+"seq_mp.nextval"+",?,?,?,?)"+stamp+")";
 

    运行抛出异常: java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 5

    从网上查阅得知这个异常一般是由于参数类型不正确的问题, 后来经排查以及参考以前写过的插入timestamp类型数据的示例将代码做了调整, 调整之后的代码为“我方法的源代码”。

 

   2、  正在为解决这个问题而兴奋不已时又碰上了第二个异常:

        java.lang.IllegalArgumentException
    at java.sql.Timestamp.valueOf(Unknown Source)...  .... 

     后来在程序中给出一个写死的日期字符串如

     Timestamp stamp = DateConventer.strWithtimeToTimestamp("2008-02-21 12:12:12");这种形式然后一测试通过...  ...
 

     于是我追本溯源, 最终发现是我在提交的表单中输入时间时是在中文状态下输入的, 也即我用的“:”是全角的, 当我将全角的“:”改成半角的“:”一试验OK!

 

   3、  起初我在使用to_date(stamp,'yyyy-MM-dd  HH:mm:ss')时插入数据库时抛出异常:

         ORA-01810: 格式代码出现两次

         上网插叙得知错误的原因是oracle中不区分大小写, 因此'yyyy-MM-dd  HH:mm:ss' 中有两个mm, 然后将mm修改成mi即可以了。

       如果要以24小时的形式显示出来要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份

      总结一下   JAVA类型与SQL类型的互相映射

          JAVA 类型                                    SQL类型

           String                                         varchar或Longvarchar或varchar2

       java.math.BigDecimal                 numeric  或  number

       boolean                                                bit

         byte                                                   tinyint

         short                                                  smallint

         int                                                       integer

        long                                                     bigint

         float                                                     real

         double                                                 double

          byte[]                                           varbinary  或longbinary

      java.sql.Date                                        Date

     java.sql.Time                                          Time

   java.sql.Timestamp                                Timestamp

   ————以上是针对通用的SQL而言, 关于具体的数据库如Oracle、Sqlserver,MySql等就得注意各自的方言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值