转换为dd-MMM-yy格式的java.sql.Date

时间:2020-08-09 19:04:16

标签: java date stored-procedures jdbc date-formatting

我正在执行jdbc并调用带有date参数的过程,但是我的数据库表日期格式为dd-MMM-yy格式,因此我将字符串日期转换为dd-MMM-yy格式,但是我无法设置setDate(1, sdt),因为cuz sdt必须为java.sql.Date类型,并且java.sql.Date格式为yyyy-MM-dd,因此我需要帮助

因此定义了我的过程

PROCEDURE pStoreData(d_sumDttm IN DATE, i_Retval out number);

短代码:

    System.out.print("Enter report date:");
    String sdate = scanner.nextLine();
    final Date date = new Date();
    final SimpleDateFormat format = new SimpleDateFormat();
    format.applyPattern(dd-MMM-yy);
    final String sysdt = format.format(date);
    java.sql.Date sqldt = java.sql.Date.valueOf(sysdt);
    callablestate = connection.prepareCall("{call Report.pStoreDate(?,?)}");
    callablestate.setDate(1,sqldt);
    callablestate.registerOutParameter(2,Types.REF_CURSOR);
    callable.execute();

1 个答案:

答案 0 :(得分:2)

更新

发布此更新是因为OP似乎在努力使用原始解决方案。

尊敬的OP,

Java仅用一种方式实例化日期/时间/日期时间,然后您可以按自定义方式设置其格式。数据库的工作方式相同。因此,显示给用户的格式或用户输入日期的格式都没有关系。通过应用相应的格式将其解析为date / time / date-time对象后,只需将其传递给Java / DB,其余的工作将由Java / DB进行。

import java.time.LocalDate;
import java.util.Scanner;

import com.mysql.jdbc.CallableStatement;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter report date in MM-dd-yyyy format: ");
        String strDate = scanner.nextLine();
        LocalDate localDate = LocalDate.parse(strDate, DateTimeFormatter.ofPattern("MM-dd-yyyy"));
        CallableStatement st = conn.prepareCall("{call Report.pStoreDate(?,?)}");
        st.setObject(1, localDate);
        st.registerOutParameter(2, Types.REF_CURSOR);
        st.execute();
    }
}

原始答案:

我建议您不要使用过时且容易出错的java.util.Date。改为使用LocalDate,如下所示:

LocalDate localDate = LocalDate.now();
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, localDate);
st.executeUpdate();