我的方法源代码:
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等就得注意各自的方言。