这是插入积分的方法
-------------------------------------------------------------------------------------------------
  public void inputCreditslog(int _uid, String _opr, int _crd, int _flag, String _rmk, String _adm)
    throws SQLException
  {
    DbConnection dbcon = null;
    Connection conn = null;
    PreparedStatement pstmt = null;    java.util.Date date = new java.util.Date();
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String creditsdate = format.format(date);
    try
    {
      dbcon = new DbConnection();
      conn = dbcon.getCon();      this.sql = 
        ("insert into ap_creditslog (id,userId,operation,creditsdate,credits,flag,re,adminuser) values (SEQ_AP_CREDITSLOG.nextval,'" + 
        _uid + "','" + _opr + "','" + creditsdate + "','" + _crd + "','" + _flag + "','" + _rmk + "','" + _adm + "')");

      pstmt = conn.prepareStatement(this.sql);
      pstmt.executeUpdate();
      fee(_uid, _crd, _flag);
    } catch (Exception e) {
      System.err.println(e.getMessage());
    } finally {
      pstmt.close();
      conn.close();
    }
  }
----------------------------------------------------------------------------------------------
报错信息:
文字与格式字符串不匹配
----------------------------------------------------------------------------------------------
bean
-----------------------------------------------------------------------------------------------
public class AP_CREDITLOGBean {
  private int id;
  private int userId;
  private String operation;
  private java.sql.Date creditsdate;
  private int credits;
  private int flag;
  private String re;
  private String adminuser;
  
public String getAdminuser() {
return adminuser;
}
public void setAdminuser(String adminuser) {
this.adminuser = adminuser;
}
public int getCredits() {
return credits;
}
public void setCredits(int credits) {
this.credits = credits;
}
public java.sql.Date getCreditsdate() {
return creditsdate;
}
public void setCreditsdate(java.sql.Date creditsdate) {
this.creditsdate = creditsdate;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getRe() {
return re;
}
public void setRe(String re) {
this.re = re;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
-------------------------------------------------------------------------------------------------------
谢谢啦。急急急急!!

解决方案 »

  1.   

    结贴率不高啊。
    ORACLE在插入时间类型的时候需要调用to_date函数,你上边写的在java里转换成date类型的数据,然后插入ORACLE对数据库而言毫无任何意义,你是这么写的
    '" + creditsdate + "'数据库会把它当做字符串处理,但是字段的类型是个Date类型,所以肯定报错。
    目前只发现这一个错误。
      

  2.   

    给你个例子"insert into SYS_DOMAIN_RELATION(COMMISSION_DOMAIN,CREDIT_DOMAIN,TYPE_CODE,TIMESTAMP,U_CODE)" +
       "values('"+point1+"','"+point2+"','"+centerDomain+"',TO_DATE('"+dtStr+"','YYYY-MM-DD HH24:MI:SS'),'"+ucode+"')";
      

  3.   

    数据库的creditsdate字段是时间类型呢还是字型的呢?
    在oracle中,你插入的数据类型必须和数据库的数据类型保持一致才行
    不像mssql,它可以自动进行类型转换
      

  4.   

    转成时间类型用to_date()函数
    转成字符类型用to_char()函数
      

  5.   

    额,你确定在to_date("",''YYYY-MM-DD HH24:MI:SS') 这格式没错误么?
      

  6.   

    各位 问题基本已经解决了 但是 我所插入的时间确实 0011-06-23 00:00:00   我的SQL改成了: 
    sql = "insert into ap_accountlo(id,userId,OPERATION,TRADEDATE,AMOUNT,FLAG,REMARK,ADMINUSER) " +
              "values (SEQ_AP_ACCOUNTLOG.nextval,"+_uid+",'"+_opr+"',to_date(sysdate,'dd-Mon-yyyy hh24:mi:ss'),"+_amt+","+_flag+",'"+_rmk+"','"+_adm+"')";
     请问为什么 插入后的系统时间会出问题?
      

  7.   

    to_date(sysdate,'YYYY-MM-DD hh24:mi:ss')
      

  8.   

    你的SQL语句错了
    sql = "insert into ap_accountlo(id,userId,OPERATION,TRADEDATE,AMOUNT,FLAG,REMARK,ADMINUSER) " +
      "values (SEQ_AP_ACCOUNTLOG.nextval,"+_uid+",'"+_opr+"',to_date('"+sysdate+"','dd-Mon-yyyy hh24:mi:ss'),"+_amt+","+_flag+",'"+_rmk+"','"+_adm+"')";
    你那个变量没加单引号跟双引号大哥。
      

  9.   

    此问题关于年份已经解决  原因 将YYYY 改成 YY即可
    但是 为何 时分秒还是出不来?
      

  10.   

    看错了,你是想用oracle的系统时间是吧,不知道函数里套函数行不行你就直接传进去一个
    'YYYY-MM-DD HH24:MI:SS'这样形式的String变量就行了,先试试
      

  11.   

    哦,知道哪错了,如果你用oracle的sysdate你根本不用再调用to_date函数了,这个函数是把字符传唤成时间,你直接在那个位置写sysdate就行。to_date是把你的java里的变量插入数据库。
    '"+_opr+"',sysdate,
    或者
    '"+_opr+"',to_date('1984-33-44','YYYY-MM-DD  hh24:mi:ss')
      

  12.   

    你把this.sql 输出来在用数据库工具分析或执行一下不就找到问题了!
      

  13.   

    问题解决了 灰常感谢!太久没用oracle了...