在将数据插入mysql表时我做错了什么?

And*_*era -1 java mysql

执行代码后,我得到了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);
    }    
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

我究竟做错了什么

好吧,你是通过连接值来构建SQL语句.这会导致SQL注入攻击 - 以及其他问题.幸运的是,这实际上还没有产生问题 - 因为你永远不会执行你的陈述.

你需要:

  • 参数化您的SQL,以避免SQL注入攻击 - 使用参数的问号,然后用于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!");
    
    Run Code Online (Sandbox Code Playgroud)
  • st.executeUpdate在显示对话框之前调用.(理想情况下,您不应该在同一方法中混合UI和数据访问,但......)

请更改的顺序,但-你只是添加一个电话st.executeUpdate,或者你有在你的应用程序一个可怕的安全漏洞.