Java 尝试使用executeUpdate发出数据操作语句时出错

Java 尝试使用executeUpdate发出数据操作语句时出错,java,mysql,sql,exception,Java,Mysql,Sql,Exception,com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误; 查看与MySQL服务器版本对应的手册,以了解在第1行的“firstName”、“lastName”、“email”、“address”、“userName”、“password”)值(“nu”)附近使用的正确语法 当我运行gui向表中输入数据时,出现上述错误 我正在使用下面的代码您在您的声明的最后部分缺少了“。您的声明应该是: PreparedStatem

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误; 查看与MySQL服务器版本对应的手册,以了解在第1行的“firstName”、“lastName”、“email”、“address”、“userName”、“password”)值(“nu”)附近使用的正确语法

当我运行gui向表中输入数据时,出现上述错误


我正在使用下面的代码

您在您的声明的最后部分缺少了
。您的声明应该是:

 PreparedStatement statement = 
 conn.prepareStatement("INSERT INTO person ('firstName', 'lastName', 'email', 
                      'address', 'userName', 'password') "
                     + "VALUES ('" + first + "', '" + last + "', '" + email + "',
        '" + address + "', '" + username + "', '" + password + "')");

在执行之前,请尝试以下方式查看查询,以找出错误:

    public void Create(String first, String last, String email, String address, String username, String password) {
        Connection conn = null;
        PreparedStatement statement = null;
        try {
            Class.forName(JDBC_DRIVER).newInstance();
            conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

            StringBuilder query = new StringBuilder("INSERT INTO person(firstName, lastName, email, address, userName, password) VALUES(")
                .append("'").append(first).append("',")
                .append("'").append(last).append("',")
                .append("'").append(email).append("',")
                .append("'").append(address).append("',")
                .append("'").append(username).append("',")
                .append("'").append(password).append("'")
                .append(")");

            System.out.println( query.toString());

            statement = conn.prepareStatement( query.toString() );
            statement.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            if (statement != null) {
                statement.close();
            }

            if (conn != null) {
                conn.close();
            }

        }
    }
您可以按如下方式更改submitButton函数:

    //action listeners for Login in button and menu item
    submitButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String fName = jtfFname.getText();
            String lName = jtfLname.getText();
            String email = jtfEmail.getText();
            String address = jtfAddress1.getText();
            String username = jtfUsername.getText();
            String password = jtfPassword.getText();

            Create(fName , lName, email, address, username, password);
        }
    });

不要以这种方式使用prepared语句。您的代码容易受到SQL注入的攻击。

以这种方式使用准备好的语句:

    PreparedStatement statement = conn.prepareStatement(
          "INSERT INTO person (firstName, lastName, email, address, userName, password) "
          + "VALUES (? , ?, ?, ?, ?, ?)";
        statement.setString( 1, first);
        statement.setString( 2, last );
        statement.setString( 3, email );
        statement.setString( 4, address );
        statement.setString( 5, username );
        statement.setString( 6, password );
        statement.executeUpdate();
这也防止了诸如省略撇号之类的愚蠢错误。


下面是一个教程
如何使用PreparedStatement

去掉firstName、lastName等周围的单引号。我想David的意思是,去掉列名周围的单引号;)密码值旁边缺少撇号:
“+password+”)");嘿,这已经修复了它,但是当它操作表时,插入的值都是空的。为此干杯,我如何使它使我的gui能够实现这一点。只需将此示例复制并粘贴到您的代码中,它就会起作用。嘿干杯,我如何用我的gui实现这一点以获得jtextfields?根据您的要求进行修改,看起来正确,我只是想把这个代码添加到我的。。不确定如何删除。删除定义:字符串开头、结尾、电子邮件、地址、用户名、密码;将submitButton操作替换为提供的操作,将create函数实现替换为提供的操作。。。让我把它完成,因为您似乎工作得很好,只是在使用
语句时遇到了问题。close()