繁体   English   中英

否执行Oracle Procedure Java

[英]no Execute Oracle Procedure Java

JAVA代码

public boolean userReg(User user) throws SQLException, ClassNotFoundException {
    Connection conn = null;
    CallableStatement cs = null;
    try {
        conn = OracleDAOFactory.createConnection();
        cs = conn.prepareCall("{call REG_USER(?,?,to_date(?,'yyyy-MM-dd'),?,?)}");
        cs.setString(1, user.getEmail());
        cs.setString(2, user.getPassword());
        cs.setString(3, user.getBirthday());
        cs.setString(4, user.getAbout());
        cs.setString(5, user.getFullName());
        cs.execute();
        cs.close();
    } catch (SQLException e) {
        e.getStackTrace();
    } finally {
        assert conn != null;
        conn.close();
    }
    return true;
}

Oracle SQL

CREATE OR REPLACE PROCEDURE REG_USER 
( 
EMAIL IN VARCHAR2, 
PASSWORD IN VARCHAR2, 
BIRTHDAY IN DATE, 
ABOUT IN VARCHAR2, 
FULLNAME IN VARCHAR2 
) AS BEGIN 
INSERT INTO MAILBOX_USERS VALUES(EMAIL,FULLNAME,PASSWORD,BIRTHDAY,ABOUT,1,0); 
END REG_USER;

我有以下问题:

我无法在数据库中添加日期,执行代码时不添加日期,则一切正常。

如何准备日期字段以添加到数据库?

更改您的代码以使用setDate并使用java.sql.Date.valueOf(String)传递经过解析的日期,该日期需要格式为yyyy-MM-dd日期字符串

public boolean userReg(User user) throws SQLException, ClassNotFoundException { 
Connection conn = null; 
CallableStatement cs = null; 
try { 
  conn = OracleDAOFactory.createConnection(); 
  cs = conn.prepareCall("{call REG_USER(?,?,?,?,?)}"); 
  cs.setString(1, user.getEmail()); 
  cs.setString(2, user.getPassword()); 
  cs.setDate(3, java.sql.Date.valueOf(user.getBirthday()));
  cs.setString(4, user.getAbout()); 
  cs.setString(5, user.getFullName()); 
  cs.execute(); 
  cs.close(); 
}catch (SQLException e){ 
e.getStackTrace(); 
}finally { 
assert conn != null; 
conn.close(); 
} 
return true; 
}

请查看此内容以获取有关传递日期和时间戳记参数的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM