基于用户名密码和位置的sqlite java登录
我是一名在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录。在数据库中,我有一个username列、一个password列和一个position列。登录的目的是当用户输入用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员、经理或教师),它们将转到不同的jframe。目前,我创建了一个代码,该代码将从登录jframe中获取jtextfield,并通过sqlite数据库运行它以查找任何匹配项,将结果保存到jdialog中,其中jtextfields是隐藏的,然后,根据jdialog中的用户名和密码jtextfield是否为空以及用户名的位置(管理员、管理员或教师),登录jframe将随着相应jframe的打开而关闭 这是我连接到sqlite数据库的代码基于用户名密码和位置的sqlite java登录,java,sqlite,Java,Sqlite,我是一名在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录。在数据库中,我有一个username列、一个password列和一个position列。登录的目的是当用户输入用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员、经理或教师),它们将转到不同的jframe。目前,我创建了一个代码,该代码将从登录jframe中获取jtextfield,并通过sqlite数据库运行它以查
private void loginDatabase(){
//Checks to see if Login is Administrator and then sends him to his respective location
String userName1 = Usr1.getText();
String passWord1 = Pass1.getText();
try{
String query1 = "select * from LoginManager where Username='"+userName1+"' and Password='"+passWord1+"' and Position=?";
PreparedStatement pst1 = conn.prepareStatement(query1);
ResultSet rs1 = pst1.executeQuery();
if (rs1.next()){
String add1 = rs1.getString("Username");
usernameCon1.setText(add1);
String add2 = rs1.getString("Password");
passwordCon1.setText(add2);
String add3 = rs1.getString("Position");
positionCon1.setText(add3);
}
pst1.close();
rs1.close();
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
这是我实际工作的代码(目前,这两个方法都没有附加到enter键上的按钮,因为我试图先将它们放入类中,然后再放入其中)
最终,我对if-else的说法感到很不舒服
我为疯狂的语法道歉。当我开始这个项目的时候,我对编码礼节真的很陌生。我一直在努力改变我的习惯,在我的程序和我的所有其他程序将在适当的格式
再次感谢你的帮助
EDIT:所以我明白了,我只是从sql语句中删除了额外的内容,只获取基于用户名和密码的信息
String query1 = "select * from LoginManager where Username='"+userName1+"' and Password='"+passWord1+"'";
要获得更好的代码结构,请使用用户类
public class User{
public String userName;
public String passWord;
public String position;
public User(String userName,String passWord,String position){
this.userName = userName;
this.passWord = passWord;
this.position = position;
}
}
要正确使用preparedstation
,请准备参数。像这样:
String query = "select * from LoginManager where Username=? and Password=?";
PreparedStatement stmt = con.prepareStatement(query);
//Parameters
stmt.setString(1, userName);
stmt.setString(2, passWord);
//Execute
stmt.executeQuery();
loginDatabase
方法返回用户对象或null
案例登录失败
public User loginDatabase(String userName,String passWord){
User user = null;
String query = "select * from LoginManager where Username=? and Password=?";
PreparedStatement stmt = con.prepareStatement(query);
//Parameters
stmt.setString(1, userName);
stmt.setString(2, passWord);
//Execute
ResultSet res = stmt.executeQuery();
if(res.next()){
//You dont need to find userName & passWord, are already exists
String position = res.getString("position");
user = new User(userName, passWord, position);
}
return user;
}
最后,检查用户位置
public void login(){
String userName = userNameTF.getText();
String passWord = passWordTF.getText();
User user = loginDatabase(userName, passWord);
if(user != null){
switch(user.position){
case "Administrator":
// ...
break;
case "Manager":
// ...
break;
case "Teacher":
// ...
break;
}
}else{
// login failed 'Invalid login'
}
}
我不知道为什么要混合使用注入查询和基于参数的查询,但我建议您坚持使用基于参数的查询(即
PreparedStatements
而不是字符串连接)。根据您的查询,它要么返回结果,要么不返回结果,如果返回,则表示匹配成功,否则不返回。我要做的是,将所需信息(用户名和位置)包装到一个对象中,然后可以使用该对象确定要显示的UI。如果login方法返回null
,则他们无法登录
public void login(){
String userName = userNameTF.getText();
String passWord = passWordTF.getText();
User user = loginDatabase(userName, passWord);
if(user != null){
switch(user.position){
case "Administrator":
// ...
break;
case "Manager":
// ...
break;
case "Teacher":
// ...
break;
}
}else{
// login failed 'Invalid login'
}
}