如何将Java变量插入MySQL查询?
我正在尝试为我的MySQL数据库创建一个注册系统。我创建了一个Java表单,用户在其中插入用户名、密码和他们的电子邮件。我获取该信息并相应地将其存储在变量中。MySQL连接代码可以工作,它确实插入了一个新行,但是MySQL页面上的信息是空白的。我做错什么了吗如何将Java变量插入MySQL查询?,java,mysql,jdbc,Java,Mysql,Jdbc,我正在尝试为我的MySQL数据库创建一个注册系统。我创建了一个Java表单,用户在其中插入用户名、密码和他们的电子邮件。我获取该信息并相应地将其存储在变量中。MySQL连接代码可以工作,它确实插入了一个新行,但是MySQL页面上的信息是空白的。我做错什么了吗 public class Main extends JFrame { private static final long serialVersionUID = 1L; private JPanel contentPane; privat
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField textField;
private JPasswordField passwordField;
private static Connection con;
private static PreparedStatement st;
private static int rs;
String username;
String password;
String email;
private JTextField textField_1;
String insertTableSQL = "INSERT INTO `users`" + "(username, password, email) VALUES" + "(?,?,?)";
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Main() {
setResizable(false);
setTitle("Barrage : Login / Register");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 350, 200);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel("Username: ");
lblNewLabel.setBounds(60, 25, 68, 20);
contentPane.add(lblNewLabel);
JLabel lblPassword = new JLabel("Password: ");
lblPassword.setBounds(60, 59, 68, 20);
contentPane.add(lblPassword);
textField = new JTextField();
username = textField.getText();
textField.setBounds(138, 22, 120, 26);
contentPane.add(textField);
textField.setColumns(10);
passwordField = new JPasswordField();
password = passwordField.getText();
passwordField.setBounds(138, 56, 120, 26);
contentPane.add(passwordField);
JButton btnRegister = new JButton("Register");
btnRegister.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/barrage", "root", "");
st = con.prepareStatement(insertTableSQL);
st.setString(1, username);
st.setString(2, password);
st.setString(3, email);
st.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
}
}
});
btnRegister.setBounds(119, 138, 89, 23);
contentPane.add(btnRegister);
JLabel lblEmail = new JLabel("E-mail: ");
lblEmail.setBounds(60, 96, 68, 20);
contentPane.add(lblEmail);
textField_1 = new JTextField();
email = textField_1.getText();
textField_1.setBounds(138, 93, 120, 26);
contentPane.add(textField_1);
textField_1.setColumns(10);
}
}不要这样做。这是一个安全漏洞,称为。使用带有变量绑定的
PreparedStatement
(例如:?
)
至于为什么它在数据库中是空的(我想你是这么说的),你必须证明这些变量的值在传统的调试中不是空的。依我看,如果您的表是用正确的约束设置的(例如:
notnull
),它甚至不会让您在一开始就插入无效状态。不要这样做。这是一个安全漏洞,称为。使用带有变量绑定的PreparedStatement
(例如:?
)
至于为什么它在数据库中是空的(我想你是这么说的),你必须证明这些变量的值在传统的调试中不是空的。依我看,如果您的表是用正确的约束设置的(例如:
notnull
),它甚至不会让您在一开始就插入无效状态。我认为最好使用命名参数。。。我只是说,请投票支持正确的方法,但我认为用户没有得到varables中的值。我真的很抱歉,但我不理解你所说的。你介意重新措辞吗?谢谢D@romofan23好的,但你不明白什么?我不明白事先准备好的声明。我已经阅读了您提供的教程,但我太困惑了。我认为最好使用命名参数。。。我只是说,请投票支持正确的方法,但我认为用户没有得到varables中的值。我真的很抱歉,但我不理解你所说的。你介意重新措辞吗?谢谢D@romofan23好的,但你不明白什么?我不明白事先准备好的声明。我已经阅读了您提供的教程,但我太困惑了。请参阅。它导致PreparedStatement
。请参阅。它导致PreparedStatement
。