问题描述
在我的项目中,我已经组装了一个基本的密码簿,该项目旨在在单击“保存信息”按钮后将用户信息发送到 MysqL 数据库。当 String 值被硬编码时它工作正常,但是当我尝试使用任何类型的 String 变量或 toString() 方法时,我开始收到错误。有谁知道将 UN 硬编码值发送到 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,165,25);
panel.add(websiteText);
//websitetoString = websiteText.toString();
userLabel = new JLabel("Username"); //2nd
userLabel.setBounds(10,60,25);
panel.add(userLabel);
userText = new JTextField(20); // 2nd
userText.setBounds(100,25);
panel.add(userText);
//userToString = userText.toString();
emailLabel = new JLabel("Email"); //3rd
emailLabel.setBounds(10,100,25);
panel.add(emailLabel);
emailText = new JTextField(); //2nd
emailText.setBounds(100,25);
panel.add(emailText);
//emailToString = emailText.toString();
passLabel = new JLabel("Password"); //4th
passLabel.setBounds(10,140,25);
panel.add(passLabel);
passtext = new JTextField(); // 4th
passtext.setBounds(100,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,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();
}
}
}
解决方法
如果我没看错,passText 是一个 Textfild(建议使用匈牙利表示法,使代码更易于阅读)来获取您需要的文本 .gettext()。像准备的preparedStatement.setString(int,passText.getText());这应该够了吧。但是您需要在清除字段之前获取文本。您的代码似乎首先清除,然后在语句中使用 .setTxt。如果我错了,我很抱歉,atm。我只有手机可以浏览。