亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我有一個約會安排應用程序,我正在嘗試創建

我有一個約會安排應用程序,我正在嘗試創建

慕森卡 2023-05-10 15:17:38
我停在需要彈出窗口通知用戶他們的約會時間為 15 分鐘的地方。當我運行代碼時,出現 sql 錯誤。任何幫助表示贊賞。我已經用實時代替了變量,它工作正常。當我將變量放回原處時,出現下面列出的錯誤。public static Appt apptIn15Min() {Appt appointment;LocalDateTime now = LocalDateTime.now();ZoneId zid = ZoneId.systemDefault();ZonedDateTime zdt = now.atZone(zid);LocalDateTime ldt = zdt.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();LocalDateTime ldt2 = ldt.plusMinutes(15);String user = UserDB.getCurrentUser();System.out.println(ldt);System.out.println(ldt2);System.out.println(user);try {    Statement statement = DBConnection.getConnection().createStatement();    String query = "SELECT * FROM appointment WHERE start BETWEEN '" + ldt + "' AND '" + ldt2;    ResultSet results = statement.executeQuery(query);    System.out.println(query);    System.out.println("Lookup started");    if(results.next()) {        appointment = new Appt(results.getInt("aptId"), results.getInt("customerId"), results.getString("start"),            results.getString("end"), results.getString("contact"), results.getString("type"),            results.getString("location"), results.getString("contact"));        System.out.println("Lookup Completed");        return appointment;    }} catch (SQLException e) {    System.out.println("SQLException: " + e.getMessage());}錯誤:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本對應的手冊,以了解在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl 的第 1 行的 ''2019-07-29T21:59:28.709' 附近使用的正確語法.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 com.mysql.jdbc.Util。 handleNewInstance(Util.java:425) 在 com.mysql.jdbc.Util.getInstance(Util.java:408) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944) 在 com.mysql.jdbc.MysqlIO .checkErrorPacket(MysqlIO.java:3978) 在 com.mysql.jdbc.MysqlIO。
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

PreparedStatement

除了 Safeer Ansari 的回答之外,我將舉例說明如何?PreparedStatement在這種情況下使用它以及為什么它會有利。

對于LocalDateTime參數,請使用PreparedStatement::setObject.

和可以這樣重寫StatementString

Connection con = DBConnection.getConnection();

String query = "SELECT * FROM appointment WHERE start BETWEEN ? AND ? ;";

PreparedStatement statement = con.prepareStatement(query)

statement.setObject(1,ldt);

statement.setObject(2,ldt2);

ResultSet rs = statement.executeQuery();

請注意如何構建String query語句不再需要任何String串聯,而是使用?as 位置來設置變量。使用動態查詢時使用PreparedStatementover沒有任何缺點。Statement

注意:?我沒有包括任何關閉資源或exception處理以保持示例簡單。使用try-with-resources來完成這項工作。


查看完整回答
反對 回復 2023-05-10
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

錯誤在您的查詢字符串中,因為ldt2之后沒有結束單引號

這是您的查詢的樣子:

String query = "SELECT * FROM appointment WHERE start BETWEEN '" + ldt + "' AND '" + ldt2 + "'";

此外,我建議將 String.format() 用于字符串格式化目的,而不是嘗試連接如此復雜的字符串。

我希望這能解決你的問題


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號