簡體   English   中英

將數據插入mysql表時我做錯了什么?

[英]What am I doing wrong in inserting data to mysql table?

執行代碼后,我收到了“ Data saved消息,但是我的clients表中沒有記錄任何數據? 我是Java數據庫的新手,我在做錯什么或如何修復我的代碼?

    String sqlUrl = "jdbc:mysql://localhost:3306/clientinformation";
    String user = "root";
    String pass = "root";
    String name = firstName.getText();
    String lname = lastName.getText();
    String cEmail = email.getText();
    String rate = rateDbl.getText();
    String cUrl = url.getText();
    try {
        Connection con = DriverManager.getConnection(sqlUrl, user, pass);
        PreparedStatement st = con.prepareStatement("insert into clients 
                values('"+name+"', '"+lname+"', "
                + "'"+cEmail+"', '"+rate+"', '"+cUrl+"')");
        JOptionPane.showMessageDialog(null, "Data saved!");
    } catch (SQLException ex) {
        Logger.getLogger(newClient.class.getName()).log(Level.SEVERE, null, ex);
    }    

我究竟做錯了什么

好的,您是通過串聯值來構建SQL語句的。 這導致SQL注入攻擊 -以及其他問題。 幸運的是,這實際上還沒有產生問題-因為您從未執行過語句。

你需要:

  • 參數化您的SQL,以避免SQL注入攻擊-對參數使用st.setString ,然后使用st.setString設置每個參數:

     Connection con = DriverManager.getConnection(sqlUrl, user, pass); PreparedStatement st = con.prepareStatement( "insert into clients values (?, ?, ?, ?, ?)"); st.setString(1, name); st.setString(2, lname); st.setString(3, cEmail); st.setString(4, rate); // Should this really be a string? st.setString(5, cUrl); st.executeUpdate(); JOptionPane.showMessageDialog(null, "Data saved!"); 
  • 在顯示對話框之前,請調用st.executeUpdate (理想情況下,您不應該在同一方法中混合使用UI和數據訪問,但是...)

按順序雖然變化- 只是增加一個呼叫st.executeUpdate ,或者你有你的應用程序一個可怕的安全漏洞。

您看不到數據的原因是您准備了語句但從不執行它。 調用st.execute(); st.executeUpdate(); 執行它。


但是,單獨地:該代碼需要進行SQL注入 (攻擊或其他方式); 有趣的插圖在這里 准備好的陳述的一半是為了防止它們。 使用准備好的語句為您提供的參數:

PreparedStatement st = con.prepareStatement("insert into clients values(?, ?, ?, ?, ?)");
int n = 1;
st.setString(n++, name);
st.setString(n++, lname);
st.setString(n++, cEmail);
st.setString(n++, rate);
st.setString(n++, cUrl);
// And then the missing execute
st.execute();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM