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

 莹TX_937 发布于 2023-02-13 18:24

执行代码后,我得到了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);
    }    

Jon Skeet.. 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!");

st.executeUpdate在显示对话框之前调用.(理想情况下,您不应该在同一方法中混合UI和数据访问,但......)

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

1 个回答
  • 我究竟做错了什么

    好吧,你是通过连接值来构建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!");
    

    st.executeUpdate在显示对话框之前调用.(理想情况下,您不应该在同一方法中混合UI和数据访问,但......)

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

    2023-02-13 18:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有