java—如何避免向mysql数据库发送硬编码值

0ve6wy6x  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(198)

在我的项目中,我组装了一本基本密码手册,该项目旨在单击“保存信息”按钮后将用户信息发送到mysql数据库。当字符串值被硬编码时,它可以正常工作,但是当我尝试使用任何类型的字符串变量或tostring()方法时,我开始出错。有人知道向mysql发送未硬编码值的正确方法吗?

import javax.swing.*;
//import java.io.*;
//import java.lang.Thread.State;
import java.awt.event.*;
import java.sql.*;

public class PasswordBook implements ActionListener
{
    private static JLabel websiteLabel;
    private static JTextField websiteText;
    private static JLabel userLabel;
    private static JTextField userText;
    private static JLabel passLabel;
    private static JTextField passText;
    private static JLabel emailLabel;
    private static JTextField emailText;
    private static JButton button;
    private static JButton clearButton;
    private static JLabel success;
    //private static String websiteToString; (values I tried)
    //private static String userToString;
    //private static String emailToString;
    //private static String passToString;

    public static void main (String[]args)
    {

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        frame.setSize(400,350);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);

        panel.setLayout(null); // rows columns

        websiteLabel = new JLabel("Website"); //1st
        websiteLabel.setBounds(10, 20, 80, 25);
        panel.add(websiteLabel);

        websiteText = new JTextField(); //1st
        websiteText.setBounds(100, 20, 165, 25);
        panel.add(websiteText);
        //websiteToString = websiteText.toString();

        userLabel = new JLabel("Username"); //2nd
        userLabel.setBounds(10, 60, 80 ,25);
        panel.add(userLabel);

        userText = new JTextField(20); // 2nd
        userText.setBounds(100, 60, 165, 25);
        panel.add(userText);
        //userToString = userText.toString();

        emailLabel = new JLabel("Email"); //3rd
        emailLabel.setBounds(10, 100, 80 ,25);
        panel.add(emailLabel);

        emailText = new JTextField(); //2nd
        emailText.setBounds(100, 100, 165, 25);
        panel.add(emailText);
        //emailToString = emailText.toString();

        passLabel = new JLabel("Password"); //4th
        passLabel.setBounds(10, 140, 80, 25);
        panel.add(passLabel);

        passText = new JTextField(); // 4th
        passText.setBounds(100, 140, 165, 25);
        panel.add(passText);
        //passToString = passText.toString();

        button = new JButton("Save Information");
        button.setBounds(10, 180, 150 ,25);
        button.addActionListener(new PasswordBook()); // action listener to button
        panel.add(button);

        clearButton = new JButton("Clear");
        clearButton.setBounds(180, 180, 150, 25);

        // CLEARS THE TEXT FIELDS WHEN PRESSED
        clearButton.addActionListener(new ActionListener() {

            @Override // Override allows function to perfrom independently of the parent class
            public void actionPerformed(ActionEvent event)
            {
                websiteText.setText("");
                userText.setText("");
                emailText.setText("");
                passText.setText("");
                success.setText("");
            }
        });

        panel.add(clearButton);

        success = new JLabel("");
        success.setBounds(10, 220, 300, 25);
        panel.add(success);

        frame.setVisible(true);

    }

    public void actionPerformed(ActionEvent event) {
        try {

            Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/passwordbook", "root", "password");
            //Statement myStatement = myConn.createStatement();
            String sq1 = "INSERT into website_and_user_info"
                        + " (Website, Username, Email, Password)"
                        + " values (?, ?, ?, ?)";

            PreparedStatement statement = myConn.prepareStatement(sq1);
            statement.setString(1, websiteText.toString()); // These values work when hardcoded
            statement.setString(2, userText.toString());
            statement.setString(3, emailText.toString());
            statement.setString(4, passText.toString());

            statement.executeUpdate();

            System.out.println("insert complete");

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

    }

}
pjngdqdw

pjngdqdw1#

如果我读对了,passtext是一个textfild(advice使用匈牙利符号,使代码更易于阅读),用于获取所需的文本。gettext()。与preparedstatement.setstring(int,passtext.gettext())类似;这应该能奏效。但在清除字段之前,您需要获取文本。您的代码似乎首先被清除,并在语句中使用.settxt。如果我错了,我是sry,atm。我只有手机可以浏览。

相关问题