回答

收藏

字符串到java.sql.Date

技术问答 技术问答 199 人阅读 | 0 人回复 | 2023-09-14

我意识到这已经被问了很多。我确实看过。我花了几个小时环顾四周,并试图解决这个问题。我应该编写一个程序,该程序在数据库中存储相当于约会列表的内容,并包含描述,日期,开始时间和结束时间。它必须接受用户的输入才能添加或取消约会,据我所知,这意味着我需要将字符串转换为日期。# ]% x7 y* X0 H
这些是我的导入:import java.io.File; 导入java.io.IOException; 导入java.sql.Connection;
5 ?5 @2 [5 T/ t  ^7 R& F  u$ I导入java.sql.Date; 导入java.sql.PreparedStatement; 导入java.sql.ResultSet;4 D. `. g( \5 @8 X  v: D
导入java.sql.ResultSetMetaData; 导入java.sql.SQLException; 导入java.sql.Time;
3 v) s5 e8 s- J& M8 s$ y导入java.text.DateFormat; 导入java.text.ParseException;, N9 p# @1 O" t5 f! N3 @  O3 ]
导入java.text.SimpleDateFormat; 导入java.util.ArrayList; 导入java.util.Scanner;
5 L$ S( j# j$ \! L1 `8 e8 x2 S如您所见,那里没有java.util.Date。这是我遇到错误的地方:' {. `# }5 E; Q# }8 u+ V- {
private static java.sql.Date getDay()
" K+ r/ J5 m( D0 G& n{
# K( j- b- s% [) M    Scanner in = new Scanner(System.in);
7 P) V% Y- e; J6 v4 {1 Y; `( s    String input;
: H7 x/ y( d7 u# h. ]$ |3 p    Date apptDay = null;" [1 U! N2 b1 y- ?
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");# q; `1 E3 j; j
    java.sql.Date sqlDate;9 g( f( L  P" I# d+ `
    System.out.println("\nPlease enter the date of the appointment, format: yyyy/mm/dd");! C* s; B3 a0 I! Q# k
    while(apptDay == null)" [7 x/ v; s# c
    {
0 f% f. ?! [1 T6 }        try/ k2 g* u# v7 v7 \% R
        {
; _1 O3 s; m, a* H            input = in.next();$ r3 v) i( n3 y6 W
            apptDay = (Date) df.parse(input);
9 U! I( f& B0 j        }
0 |) n4 H1 N2 A% g5 z8 ^& T/ u        catch(ParseException e)
$ H: r% M1 w8 @        {/ H' e' i: b9 r3 e9 _0 L; Y( {! s1 l
            System.out.println(&quotlease enter a valid date! Format is yyyy/mm/dd");5 j- P7 X3 N# }3 h6 X2 r
        }
& H/ Z. N) O6 F# _: ~, t/ u" j    }% \5 U: Q8 E' ?
    sqlDate = new Date(apptDay.getTime());
, |( G- Z  K9 |  w7 e    return sqlDate;
' d, }! Z7 S8 m  y$ q. w) N}
) o$ s! Y1 a1 u. |1 q. f5 O我已经在其中添加了java.sql.Dates并对其进行了大量尝试以使其正常工作,但它仍然给了我这个:
7 U8 s, _8 ~+ pException in thread "main" java.lang.ClassCastException: java.util.Date7 J$ m. e1 x+ u, }
cannot be cast to java.sql.Date at Calendar.getDay(Calendar.java:47)+ {2 L4 c, x& t
对于我做错了什么或如何进行这项工作的任何想法,将不胜感激。! w; ~; D5 Q* \* z( Q
编辑:我认为如果我添加调用此代码的代码可能会有所帮助,所以也许它将更清楚我如何使用它,所以这里是addAppointment()方法,因此您可以看到getDay(7 ]9 }. q6 _0 [) v" ~6 c
)正在被调用以及它的去向。
: e" B2 z0 c5 D1 I1 V, [public static void addAppointment() throws SQLException
5 p7 O- ?6 p$ u, ^, `% e. C{8 a' C/ Y8 \) Z& e$ b& P3 ?9 L
    //get the info
6 z0 r" u; s1 n* U    String desc = getDesc();' E4 [* J' e9 v: o
    java.sql.Date apptDay = getDay();
+ x" U1 i: ?% w2 f    Time[] times = getTime();2 c3 r7 Q4 q3 M# m; X$ h
    Time startTime = times[0];
# D" d( b7 `% c& k) J/ D) s6 M    Time endTime = times[1];- u: {* G  q) q2 N
    int key;. p& f) {, |; T
    Connection conn = SimpleDataSource.getConnection(); //connect to the database, w# x0 O$ A: U# g
    try
, }( L6 J3 f3 n9 V0 W    {; P% M+ B0 P3 s6 c1 H$ I
        PreparedStatement max = conn.prepareStatement("SELECT MAX(ID) FROM Calendar");  u! \' A0 O- m; X- }3 `  i
        ResultSet result = max.executeQuery();. G& y  J1 \8 L( Z
        key = result.getInt("ID") + 1;
; {0 M8 d& m! j! W        PreparedStatement stat = conn.prepareStatement(; ^) E8 p, w, ~; r5 X( W- v
                "INSERT INTO Calendar " +
3 l( h* I* M# y                "VALUES (?, ?, ?, ?, ?)");
# g' f3 [3 {0 k4 L        stat.setInt(1, key);
: ]4 Z: [  z# C$ \        stat.setString(2, desc); 9 ~' E# b6 q2 m$ _$ O7 j+ C0 O
        stat.setDate(3, apptDay);" u+ p% u! B  D/ x+ \; r: j
        stat.setTime(4, startTime);, [# [, w8 F" G+ P* D
        stat.setTime(5, endTime);
0 Y+ w) O% l8 E0 L% O$ q        stat.execute();- O0 l. f( x5 C6 ]/ H
        System.out.println("\nAppointment added!\n");* J; ]% P8 `- {( ]! V
    }7 N* Y3 X! q( n- l8 H/ s6 Z
    finally
  q1 A" d5 A! g; g* E3 V    {; `5 j6 X6 {/ d$ a! V
        conn.close(); //finished with the database
) h/ D- N& J+ @" S6 ~2 G( T  Q    }2 F/ {, g: A# a6 G5 C0 S9 m0 ?" F' W* g
}
& A* E% B4 Y4 m5 K                / S, C- g( Q$ {3 N; {
解决方案:
7 C. F# K) _' }7 m5 q+ w                2 y4 h; Z3 E( G3 D* x* u- m2 U

$ D% f' A# t4 I6 T: I5 P' N
0 C6 B* p6 [( J+ O                将输入格式更改为,yyyy-MM-dd并使用java.sql.Date.valueOf(String
  A8 w8 B) I* v1 a" V% j7 P2 cdate)将上述格式的字符串直接转换为java.sql.Date值的方法会容易得多。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则