|
我意识到这已经被问了很多。我确实看过。我花了几个小时环顾四周,并试图解决这个问题。我应该编写一个程序,该程序在数据库中存储相当于约会列表的内容,并包含描述,日期,开始时间和结束时间。它必须接受用户的输入才能添加或取消约会,据我所知,这意味着我需要将字符串转换为日期。# ]% 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("lease 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值的方法会容易得多。 |
|