Java 如何将jTextEntry与数据库值进行比较
这是我的登录表单代码,我试图将jTextField的voteID和密码与存储在数据库中的voterID和密码进行比较。使用neatbeans,但它不允许我登录,我输入了正确的用户名和密码 您没有为gui中输入的用户名选择数据库行。您根本没有使用gui中的用户名-您的查询已硬编码Java 如何将jTextEntry与数据库值进行比较,java,jdbc,passwords,Java,Jdbc,Passwords,这是我的登录表单代码,我试图将jTextField的voteID和密码与存储在数据库中的voterID和密码进行比较。使用neatbeans,但它不允许我登录,我输入了正确的用户名和密码 您没有为gui中输入的用户名选择数据库行。您根本没有使用gui中的用户名-您的查询已硬编码“用户名”。因此,您将获得名为“用户名”的用户的密码 旁注:从安全角度来看,将原始密码以纯文本形式存储在数据库中是一种可怕的做法。您应该使用唯一的salt设置密码并存储哈希密码。在GUI中输入的密码应该使用相同的算法进行散
“用户名”
。因此,您将获得名为“用户名”
的用户的密码
旁注:从安全角度来看,将原始密码以纯文本形式存储在数据库中是一种可怕的做法。您应该使用唯一的salt设置密码并存储哈希密码。在GUI中输入的密码应该使用相同的算法进行散列,并在查询中使用。这样,如果有人窃取了数据库,他将无法了解用户密码。有关更多详细信息,请参阅
使用像SpringSecurity这样的Java框架可以为您解决许多这些问题。有关如何使用Spring安全性创建登录表单的指南,请参阅。该示例使用InMemoryUserDetailsManager,但使用JdbcUserDetailsManager对其进行回复将创建使用数据库的解决方案。是的,我正在尝试比较resultset中字符串类型的值。可能有问题,可能是我的方法有问题,请建议meIf
voterId
是您的JTextField
用户ID,您需要voterId.getText().equalsIgnoreCase(vi)
进行比较。与密码类似,这里我的voterId是一个字符串类型的变量,即string voterId=jTextField3.getText();之后,我想将其与vi进行比较,类似地,username=jTextField2.getText(),但当我比较并单击登录按钮时,它不会响应我,这意味着什么也不会发生。如果您希望其他人分析您的代码,请礼貌地对其进行适当且一致的缩进。
try
{
Class.forName("org.sqlite.JDBC");
Connection c=DriverManager.getConnection("jdbc:sqlite:voter.db");
ResultSet rs;
Statement s;
s=c.createStatement();
p="select voterId,password from voter where name='userName'";
rs=s.executeQuery(p);
while(rs.next())
{
vi=rs.getString("voterId");
pw=rs.getString("password");
if(voterId.equalsIgnoreCase(vi)&&Password.equalsIgnoreCase(pw))
{
voting v =new voting();
v.setVisible(true);
this.dispose();
}else
{
System.out.println("Invalid pasword");
}
}