java - 转换为 dd-MMM-yy 格式的 java.sql.Date
问题描述
我正在做 jdbc 并使用日期参数调用一个过程,但我的数据库表日期格式是 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();
解决方案
更新
发布此更新,因为 OP 似乎在努力解决如何使用原始解决方案。
亲爱的欧普,
Java 仅以一种方式实例化日期/时间/日期时间,然后您可以以自定义方式对其进行格式化。数据库的工作方式相同。因此,您向用户显示的格式或用户输入日期的格式都没有关系;一旦您通过应用相应的格式将其解析为日期/时间/日期时间对象,您只需将其传递给 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();
推荐阅读
- c++ - 调试 gcc 插件
- c++ - 使用 glutBitmapCharacter() 屏幕闪烁?
- amazon-web-services - AWS:查找 IAM 用户创建者
- r - 如何使用“eweibull”函数保存 Weibull 分布的参数?
- javascript - 单个应用程序中的两个独立商店
- java - 如何在不向我抛出 SecurityException 的情况下创建代理类?
- java - javax.sound.sampled.UnsupportedAudioFileException:不支持格式的流
- function - haskell 中的命题
- spring-batch - 我应该如何使用 Spring Batch 和 Spring Cloud Data Flow 对可配置的批处理网络进行切片和编排?
- arrays - 需要将字符串转换为二维数组