Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用三层体系结构和SQL server创建登录表单?_Java_Sql_Netbeans - Fatal编程技术网

Java 如何使用三层体系结构和SQL server创建登录表单?

Java 如何使用三层体系结构和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

我必须用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.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()
方法