java - 如何避免将硬编码值发送到 mySQL 数据库
问题描述
在我的项目中,我组装了一个基本的密码簿,该项目旨在在单击“保存信息”按钮后将用户信息发送到 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();
}
}
}
解决方案
如果我没看错的话,passText 是一个 Textfild(建议使用匈牙利符号,使代码更易于阅读)来获取您需要的文本 .gettext()。就像准备好的preparedStatement.setString(int, passText.getText()); 这应该够了吧。但是您需要在清除字段之前获取文本。你的代码似乎首先清楚,你在声明中使用了 .setTxt 。如果我错了,我很抱歉,atm.i 只有我的手机可以浏览。
推荐阅读
- php - 在 TurnKey GNU/Linux 9.11 中安装 sqlsrv php 扩展时出现问题
- c# - 如何从 Xamarin Forms 中的图库中选择多个图像并保存到所需的文件路径?
- python-3.x - 如何使用 python 从 Windows 机器获取 arp 表?
- flutter - 在颤动中从标签栏推送和弹出导航?
- arrays - 必须是实数,而不是 NoneType
- excel - Excel中的简单循环宏
- node.js - 如何使用 jest 在 NodeJS 中编写完全覆盖的测试用例
- javascript - 使用 undefined 作为 OR 运算符的最后一个操作数来赋值是否有效?
- c++ - 如何修复输出日志中的“EnableInput can only be specified on a Pawn for its Controller”错误
- angular - 为特定模块集成 Google Maps API