我正在执行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();
答案 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();