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

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

為什么從 Java 代碼將信息更新到 SQL 數據庫時會出現錯誤?

為什么從 Java 代碼將信息更新到 SQL 數據庫時會出現錯誤?

慕碼人8056858 2023-08-09 17:28:32
我正在為系統的注冊頁面編寫代碼。單擊按鈕后,系統將檢查用戶是否超過 14 歲。如果是,系統應將所有輸入的數據保存到 SQL 數據庫中。    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                // TODO add your handling code here:       int age = Integer.parseInt(Age_Input.getText());       String firstname = FirstName_Input.getText();       String surname = Surname_Input.getText();       String email = Email_Input.getText();       String userid = UserID_InputSignUp.getText();       char[] pass = Password_InputSignUp.getPassword();       if (age<14) {           JOptionPane.showMessageDialog(null,"Sorry, You need to be at least 14 years to use this software... ");           new Login_Page().setVisible(true);           this.setVisible(false);       } else {           try {              Class.forName("com.mysql.cj.jdbc.Driver");              Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/user_info", "root", "nerdswonka");              Statement stmt = connect.createStatement();              String query1 = "INSERT INTO user_info(user_id, password, firstname, lastname, emailid, age) VALUES('"+userid+"', "+Arrays.toString(pass)+", '"+firstname+"', '"+surname+"', '"+email+"', "+age+");";              stmt.executeUpdate(query1);              JOptionPane.showMessageDialog(null, "Account Creation succesful!");              stmt.close();              connect.close();          } catch (Exception e) {              JOptionPane.showMessageDialog(null, "Error in connecting to SQL Database");        }          new Login_Page().setVisible(true);          this.setVisible(false);    }}                                                                 該代碼不會將任何內容更新到數據庫中,只是在出現異常(錯誤)后顯示 JOptionPane??梢詫Υa進行哪些編輯以便將值存儲到 SQL 中?
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

失敗的直接原因可能是您的INSERT語句包含以下未用單引號引起來的字符串:


Arrays.toString(pass)

但是,您應該完全放棄當前的方法,而使用準備好的語句:


String sql = "INSERT INTO user_info (user_id, password, firstname, lastname, emailid, age) " +

    "VALUES (?, ?, ?, ?, ?, ?)";


try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_info", "root", "nerdswonka");

    PreparedStatement ps = conn.prepareStatement(sql)) {

        ps.setString(1, userid);

        ps.setString(2, Arrays.toString(pass));

        ps.setString(3, firstname);

        ps.setString(4, surname);

        ps.setString(5, email);

        ps.setInt(6, age);


        int row = ps.executeUpdate();

        System.out.println(row); // rows inserted (should be 1)


    }

    catch (SQLException e) {

        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());

    }

    catch (Exception e) {

        e.printStackTrace();

    }

}

準備好的語句可以做很多事情,其中之一是處理有關如何在 SQL 查詢中正確轉義文字數據的混亂細節。在這種情況下,它們使您不必擔心在插入的 Java 字符串周圍放置單引號。語句還可以防止 SQL 注入等不良事件的發生。


查看完整回答
反對 回復 2023-08-09
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

您沒有在 catch 塊中打印異常。您可以使用 e.printStackTrace(); 首先打印異常。



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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