1

当我尝试运行我的 gui 以将数据插入表中时出现错误,错误是无法使用 executeQuery() 发出数据操作语句。这个 gui 的目标是让用户在文本区域输入信息,然后单击提交,然后将该信息上传到数据库。

错误:java.sql.SQLException:无法使用 executeQuery() 发出数据操作语句。

我的代码是

class registerInterface extends JFrame {

    static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mysql";
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String USERNAME = "root";
    static final String PASSWORD = "root";
    private JTextField jtfFname, jtfLname, jtfAddress1, jtfAddress2, jtfCity, jtfZipcode, jtfState, jtfUsername, jtfPassword, jtfPassConfirm, jtfEmail, jtfdtype;
    private JButton exitButton, backButton, clearButton, submitButton;
    private JMenuItem jmiBack, jmiClear, jmiSubmit, jmiExit, jmiHelp, jmiAbout;
    String first, last, email, address, username, password, dtype;
    
       // launch the application
    public void Create() {

        Connection conn = null;
        try {
            Class.forName(JDBC_DRIVER).newInstance();
            conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

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

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

    registerInterface() {
        //create menu bar
        JMenuBar regMenuBar = new JMenuBar();

        //set menu bar to the applet
        setJMenuBar(regMenuBar);

        //add menu "operation" to menu bar
        JMenu optionsMenu = new JMenu("Options");
        optionsMenu.setMnemonic('O');
        regMenuBar.add(optionsMenu);

        //add menu "help"
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic('H');
        helpMenu.add(jmiAbout = new JMenuItem("About", 'A'));
        regMenuBar.add(helpMenu);

        //add menu items with mnemonics to menu "options"
        optionsMenu.add(jmiSubmit = new JMenuItem("Submit", 'S'));
        optionsMenu.add(jmiClear = new JMenuItem("Clear", 'C'));
        optionsMenu.add(jmiBack = new JMenuItem("Back", 'B'));
        optionsMenu.addSeparator();
        optionsMenu.add(jmiExit = new JMenuItem("Exit", 'E'));

        //panel p1 to holds text fields
        JPanel p1 = new JPanel(new GridLayout(11, 11));
        p1.add(new JLabel("First Name: "));
        p1.add(jtfFname = new JTextField(15));
        p1.add(new JLabel("Last Name: "));
        p1.add(jtfLname = new JTextField(15));
        p1.add(new JLabel("Street Address 1: "));
        p1.add(jtfAddress1 = new JTextField(15));
        
        p1.add(new JLabel("E-mail Address: "));
        p1.add(jtfEmail = new JTextField(15));
        p1.add(new JLabel("Username: "));
        p1.add(jtfUsername = new JTextField(15));
        p1.add(new JLabel("Password: "));
        p1.add(jtfPassword = new JPasswordField(15));
        p1.add(new JLabel("jtfdtype: "));
        p1.add(jtfdtype = new JTextField(15));


        //panel p2 to holds buttons
        JPanel p2 = new JPanel(new FlowLayout());
        p2.add(exitButton = new JButton("Exit"));
        p2.add(backButton = new JButton("Back"));
        p2.add(clearButton = new JButton("Clear"));
        p2.add(submitButton = new JButton("Submit"));

        //Panel with image??????

        //add panels to frame
        JPanel panel = new JPanel(new GridLayout(2, 1));
        panel.add(p1, BorderLayout.CENTER);
        panel.add(p2, BorderLayout.SOUTH);
        add(panel, BorderLayout.CENTER);


        //listners for exit menuitem and button
        jmiExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        exitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        //listner for about menuitem
        jmiAbout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "This is the registration panel"
                        + "\n Assignment for University",
                        "About", JOptionPane.INFORMATION_MESSAGE);
            }
        });


        //listners for clear menuitem and button
        jmiClear.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jtfFname.setText("");
                jtfLname.setText("");
                jtfAddress1.setText("");
                
                
                jtfEmail.setText("");
                jtfUsername.setText("");
                jtfPassword.setText("");
            }
        });

        clearButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jtfFname.setText("");
                jtfLname.setText("");
                jtfAddress1.setText("");
  
               
                jtfEmail.setText("");
                jtfUsername.setText("");
                jtfPassword.setText("");
            }
        });

        //action listeners for back buttons and redister menuitem
        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Welcome welcome = new Welcome();
                welcome.setVisible(true);
                welcome.setSize(500, 500);
                welcome.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                registerInterface.this.dispose();
                registerInterface.this.setVisible(false);
            }
        });

        jmiBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Welcome welcome = new Welcome();
                welcome.setVisible(true);
                welcome.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                registerInterface.this.dispose();
                registerInterface.this.setVisible(false);

            }
        });

        //action listeners for Login in button and menu item
        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String a = jtfFname.getText();
                String b = jtfLname.getText();
                String c = jtfEmail.getText();
                String d = jtfAddress1.getText();
                String u = jtfUsername.getText();
                String f = jtfPassword.getText();
                String g = jtfdtype.getText();
                
              
                Create();
            }
        });
    }
}

     

这是我使用的表格

CREATE TABLE PERSON (
    ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    firstName VARCHAR (50) NOT NULL,
    lastName VARCHAR (50) NOT NULL,
    email VARCHAR (50) NOT NULL,
    address VARCHAR (50),
    city VARCHAR (20),
    userName VARCHAR (20) NOT NULL,
    password VARCHAR (20) NOT NULL,
    dtype VARCHAR (20) NOT NULL,
    PRIMARY KEY (ID),
    UNIQUE KEY (email)
            );
4

2 回答 2

1

您必须使用此方法PreparedStatement#executeUpdate()而不是executeQuery

执行此 PreparedStatement 对象中的 SQL 语句,该语句必须是 SQL 数据操作语言 (DML) 语句,例如 INSERT、UPDATE 或 DELETE;或不返回任何内容的 SQL 语句,例如 DDL 语句。

于 2013-09-29T05:20:50.717 回答
0

当我尝试从下面的代码中删除记录时,我遇到了同样的问题

@Repository
@Transactional
public interface IAeqplUserStagePermissionRepository extends JpaRepository<AeqplUserStagePermissionEntity, Long> {
    
    @Query(value = "DELETE FROM aeqpl_user_stage_permissions WHERE aeqpluser_id = :aeqpluserId",nativeQuery = true)
    int deleteByUserId(Long aeqpluserId);

}

解决方案:使用@Modifying

    @Modifying
    @Query(value = "DELETE FROM aeqpl_user_stage_permissions WHERE aeqpluser_id = :aeqpluserId",nativeQuery = true)
    int deleteByUserId(@Param("aeqpluserId")Long aeqpluserId);
于 2021-04-08T12:37:22.980 回答