Java JDBC 登录表单

标签 java database swing jdbc authentication

我似乎无法在我的 Java JTextfield 和 Passwordfield 上获取密码和用户名,我试图做的是比较用户输入并检查它们是否将用户名和密码存储在数据库中,如果是的话它们会已登录,但问题是我的密码字段上的 getText() 已被弃用,我该如何解决这个问题??

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.JOptionPane;

public class Login extends JFrame {

private JLabel nameLabel;
private JLabel passwordLabel;
private JTextField nameText;
private JPasswordField passwordField;
private JButton submitButton;
Connection conn = null;

public Login(){

super("Log in!");
setLayout(new FlowLayout());
setVisible(true);
setSize(178,190);
setDefaultCloseOperation(EXIT_ON_CLOSE);

nameLabel = new JLabel("User ID: ");
add(nameLabel);

nameText = new JTextField(10);
add(nameText);

passwordLabel = new JLabel("Password: ");
add(passwordLabel);

passwordField = new JPasswordField(10);
add(passwordField);

submitButton = new JButton("Submit");
add(submitButton);

ButtonHandler handler = new ButtonHandler();
submitButton.addActionListener(handler);
}

private class ButtonHandler implements ActionListener{

public void actionPerformed(ActionEvent e){

String user = nameText.getText();
String pass = passwordField.getText();
try{
Jdbc test = new Jdbc();
conn = test.dbConn();
String query = "SELECT employee_ID,employee_password FROM user where ='"+user+"'";

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

最佳答案

使用getPassword()而不是 getText() 方法。

  char []passChars=passwordField.getPassword();
   if(passChars!=null) { 
       String pass=new String(passChars);
       String sql="SELECT employee_ID,employee_password FROM user 
                             where user=? and employee_password=?";
       PreparedStatement ps=conn.prepareStatement(sql);
       ps.setString(1,user);
       ps.setString(2,pass);
       ResultSet rs=ps.executeQuery();
       if(rs.next()) {
          //found
       }
       else{
          //not found
       }
       rs.close();
       ps.close();
       conn.close();
   }

值得注意的一点是不要使用硬编码的sql语句。使用PreparedStatement 对字符串进行转义以防止SQL 注入(inject)。

关于Java JDBC 登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426275/

相关文章:

java - Liferay Portlet 基本 MVC 流程和 View 选择

mysql - Ubuntu 和 Windows 上相同的 mysql 数据库

sql - 与 DBMS 的内存通信

java - 在 JFrame 中包含两个以上的面板?

java - 读取文本文件中一行中特定数量的字符并将 "read characters"设置为 JTextArea

java - 如何通过需要身份验证的代理发送 SOAP 消息?

java - 了解 newrelic 挂钟时间图的前 5 个请求(按百分比)

java - Catch-all servlet 和 JSP 无限循环

database - 检查 CosmosDB 集合中是否存在分区键

java - Swing 定时器的问题