Java 如何使用三层体系结构和SQL server创建登录表单?
我必须用Java做一个登录表单,使用三层架构和一个数据库,我使用的是SQL Server 在我的DA类中,我有这样的代码:基本上,我试图做的是从BL类向setPassword和setUser发送jText user和jText passwordJava 如何使用三层体系结构和SQL server创建登录表单?,java,sql,netbeans,Java,Sql,Netbeans,我必须用Java做一个登录表单,使用三层架构和一个数据库,我使用的是SQL Server 在我的DA类中,我有这样的代码:基本上,我试图做的是从BL类向setPassword和setUser发送jText user和jText password u.setLogin(jtxtUsuario.getText()); u.setContrasenia(jtxtPassword.getText()); DA.DB.getConexion(); if (DA.DB.get
u.setLogin(jtxtUsuario.getText());
u.setContrasenia(jtxtPassword.getText());
DA.DB.getConexion();
if (DA.DB.getStatus()) {
new jfrmInterno().setVisible(true);
}else {
JOptionPane.showMessageDialog(null, "El nombre de usuario ingresado no coincide con ninguna cuenta","",JOptionPane.ERROR_MESSAGE);
jtxtUsuario.setText("");
jtxtPassword.setText("");
}
在我的BL类中,我有以下代码:在方法“validarusario”中,我发送用户并传递给DA类中的“setUsuario”方法
public void setLogin(String login) {
if(login != null && login.length() > 3) {
_login = login;
}else {
_login = "Usuario Incorrecto";
}
}
public String getLogin() {
return _login;
}
public void setContrasenia(String contrasenia) {
if(contrasenia != null && contrasenia.length() > 6) {
_contrasenia = contrasenia;
}else {
_contrasenia = "Contraseña Incorrecta";
}
}
public String getContrasenia() {
return _contrasenia;
}
public void validarUsuario() {
admin.setUsuario(getLogin(), getContrasenia());
}
public Colegio() {
this("","");
}
public Colegio(String login, String contrasenia) {
setLogin(login);
setContrasenia(contrasenia);
}
}
我的问题是在DA类中,我不知道如何使用jText用户和密码,并根据DA类中DB中的用户和密码对其进行验证。我在DA类中创建了一个名为“setUsuario”的方法,该方法从jText接收用户和密码,但之后我不知道还能做什么,其想法是如果用户和密码正确,它应该打开一个新的Jframe
public static Connection getConexion() {
status = false;
String url = "jdbc:sqlserver://localhost:1433;databaseName=Colegio";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch (ClassNotFoundException e) {
System.out.println("No se pudo establecer conexión");
}
try {
cn = DriverManager.getConnection(url);
PreparedStatement ps = cn.prepareStatement("SELECT * FROM [dbo].[Login] where NombreUsuario=? AND Contrasenia=?");
ps.setString(1, user);
ps.setString(2, pass);
ResultSet rs = ps.executeQuery();
status = true;
}catch (SQLException e) {
}
return cn;
}
public void setUsuario(String user, String pass) {
DB.user = user;
DB.pass = pass;
}
在DA类中,您必须检查数据库中是否存在这样的记录
public static boolean getConexion() { // change it to boolean because it returns boolean value
status = false;
String url = "jdbc:sqlserver://localhost:1433;databaseName=Colegio";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
System.out.println("No se pudo establecer conexión");
}
try {
cn = DriverManager.getConnection(url);
PreparedStatement ps = cn.prepareStatement("SELECT * FROM [dbo].[Login] where NombreUsuario=? AND Contrasenia=?");
ps.setString(1, user);
ps.setString(2, pass);
ResultSet rs = ps.executeQuery();
if (rs.next) {
status = true;
}
} catch (SQLException e) {
}
return status;
}
public void setUsuario(String user, String pass) {
DB.user = user;
DB.pass = pass;
}
在您的视图中,您可以将值传递给setUsuario()
方法,然后调用getConexion()
方法,如果用户存在,该方法将返回true
,如下所示
DA.DB.setUsuario(jtxtUsuario.getText(), jtxtPassword.getText());
if (DA.DB.getConexion()) {
new jfrmInterno().setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "El nombre de usuario ingresado no coincide con ninguna cuenta","",JOptionPane.ERROR_MESSAGE);
jtxtUsuario.setText("");
jtxtPassword.setText("");
}
我看不到
DA.DB.getStatus()
方法,所以我在getConexion()中进行了编码
方法来显示缺少的内容,这不是在数据库连接内部编码的良好做法,它应该在单独的类中。您可以直接将值传递给setUsuario
,然后调用getConexion()
方法