Java 如何仅从it检查用户名和密码';MS Access中有自己的行吗?[杰克塞斯]
这是我使用jackcess创建的数据库:Java 如何仅从it检查用户名和密码';MS Access中有自己的行吗?[杰克塞斯],java,database,ms-access,jackcess,Java,Database,Ms Access,Jackcess,这是我使用jackcess创建的数据库: try{ if(!f.exists()){ Database db=DatabaseBuilder.create(Database.FileFormat.V2000,new File(file)); Table table=new TableBuilder("Membership Details
try{
if(!f.exists()){
Database db=DatabaseBuilder.create(Database.FileFormat.V2000,new File(file));
Table table=new TableBuilder("Membership Details")
.addColumn(new ColumnBuilder("Username",DataType.TEXT))
.addColumn(new ColumnBuilder("Full Name",DataType.TEXT))
.addColumn(new ColumnBuilder("Email Address",DataType.TEXT))
.addColumn(new ColumnBuilder("Password",DataType.TEXT))
.addColumn(new ColumnBuilder("Phone number",DataType.TEXT))
.addColumn(new ColumnBuilder("Credit/Debit Card No",DataType.TEXT))
.addColumn(new ColumnBuilder("Expiry Month",DataType.TEXT))
.addColumn(new ColumnBuilder("Expiry Year",DataType.TEXT))
.addColumn(new ColumnBuilder("Country of origin",DataType.TEXT))
.toTable(db);
if(!pw.equals(c_pw)){
JOptionPane.showMessageDialog(null, "Password does not match","Password incorrect",JOptionPane.ERROR_MESSAGE);
}
else{
table.addRow(u,n,e,pw,p,c,ex_m,ex_y,city);
x++;
}
}
else{
Database db=DatabaseBuilder.open(f);
Table table=db.getTable("Membership Details");
if(!pw.equals(c_pw)){
JOptionPane.showMessageDialog(null, "Password does not match","Password incorrect",JOptionPane.ERROR_MESSAGE);
}
else{
table.addRow(u,n,e,pw,p,c,ex_m,ex_y,city);
x++;
}
}
if(x>0){
JOptionPane.showMessageDialog(null, "Sign up complete","Complete",JOptionPane.INFORMATION_MESSAGE);
new MainMenu().start(frame);
frame.setMaximized(false);
frame.setMaximized(true);
}
}catch(Exception error){
error.printStackTrace();
这是进行用户名和密码检查的地方:
try {
Table table=DatabaseBuilder.open(file).getTable("Membership Details");
Row u=CursorBuilder.findRow(table, Collections.singletonMap("Username", user));
Row p=CursorBuilder.findRow(table, Collections.singletonMap("Password", pw));
if((file.exists())&&(!file.isDirectory())){
if((u!=null)&&(p!=null)){
Cursor cursor=CursorBuilder.createCursor(table);
boolean found=cursor.findFirstRow(Collections.singletonMap("Username", user));
if(found==true)
welcome.setText("Welcome "+cursor.getCurrentRowValue(table.getColumn("Full Name"))+" to Xtreme Airlines");
FlowPane flow=new FlowPane();
flow.getChildren().add(welcome);
flow.setAlignment(Pos.TOP_RIGHT);
panel.setTop(flow);
panel.setRight(logout);
status=true;
}
else
JOptionPane.showMessageDialog(null, "Wrong username or password","Incorrect",JOptionPane.ERROR_MESSAGE);
}
} catch (IOException e) {
e.printStackTrace();
一切正常,除了每个用户名都可以访问每个密码
例如:
用户名:Haley123密码:123
用户名:Michael321密码123456
在我的例子中,Haley123可以使用此方法访问Michael321的密码。如何确保这种情况不会发生?您应该搜索用户名和密码符合您要求的所有行,不搜索每个用户如果只有两个用户在数据库中注册,那么我应该更改什么,以便其他用户只能访问其自己的密码,如问题的情况所示?仅通过
用户名
查找该行。然后,假设您找到这样一行,检查该行的Password
列中的值,看看它是否是您期望的值。