Java netbeans中的登录系统

Java netbeans中的登录系统,java,netbeans,logging,Java,Netbeans,Logging,我想创建一个带有MS Access数据库的登录系统。要登录的数据位于数据库中 有可能在线工作,然后填写登录详细信息。然后按OK进入下一屏幕 和离线工作的能力,然后你把“学生”放在用户名处(密码保持为空),然后按OK进入下一个屏幕 如果凭证错误,则必须给出错误信息,但仅填写“学生”时不应出现错误 现在的问题是它给出了错误,因为这里输入了“学生”,但他不应该给出错误。仅当登录数据错误时。我该如何解决这个问题 代码: /**Local*/ try { String idnr

我想创建一个带有MS Access数据库的登录系统。要登录的数据位于数据库中

有可能在线工作,然后填写登录详细信息。然后按OK进入下一屏幕

和离线工作的能力,然后你把“学生”放在用户名处(密码保持为空),然后按OK进入下一个屏幕

如果凭证错误,则必须给出错误信息,但仅填写“学生”时不应出现错误

现在的问题是它给出了错误,因为这里输入了“学生”,但他不应该给出错误。仅当登录数据错误时。我该如何解决这个问题

代码:

/**Local*/
    try {
         String idnr = GebruikersnaamTekst.getText().trim();
         if (idnr.matches("Cursist")) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }
    } catch (Exception e) {
    }

/**Internet*/
  try

   {

    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);

    String db = "jdbc:odbc:db1";
    con = DriverManager.getConnection(db);
    st = con.createStatement();

    }
    catch(Exception e)
    {

  }

   try
        {

        String idnr = GebruikersnaamTekst.getText().trim();
        String pass = Password.getText().trim();

        String sql = "select idnr,pass from Table1 where idnr='"+idnr+"'and pass='"+pass+"'";
        rs = st.executeQuery(sql);

           int count = 0;
        while(rs.next())
        {
            count = count + 1;
        }

          if (count == 1) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }

        else 
        {
            JOptionPane.showMessageDialog(null, "Gebruiker niet gevonden!");
        }

        }
        catch(Exception ex )
        { 
        }




}  

如果你能正确地匹配“学生”这个词,你希望它能成功,对吗

这可能是一个区分大小写的问题,试试这个

if (idnr.toLowerCase().matches("cursist"))
这将计算为true,并且不区分大小写

此外,就程序流而言,如果它们在同一个类或main()函数中,它将执行Internet,而不管本地结果如何,这也可能会引入错误

创建一个全局布尔变量。以确认您已完成学生检查/ 完整代码:

/**Local*/
boolean isStudent = false;
    try {
         String idnr = GebruikersnaamTekst.getText().trim();
         if (idnr.matches("Cursist")) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
            isStudent=true;
        }
    } catch (Exception e) {
    }
if(!isStudent)
{
/**Internet*/
  try

   {

    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);

    String db = "jdbc:odbc:db1";
    con = DriverManager.getConnection(db);
    st = con.createStatement();

    }
    catch(Exception e)
    {

  }

   try
        {

        String idnr = GebruikersnaamTekst.getText().trim();
        String pass = Password.getText().trim();

        String sql = "select idnr,pass from Table1 where idnr='"+idnr+"'and pass='"+pass+"'";
        rs = st.executeQuery(sql);

           int count = 0;
        while(rs.next())
        {
            count = count + 1;
        }

          if (count == 1) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }

        else 
        {
            JOptionPane.showMessageDialog(null, "Gebruiker niet gevonden!");
        }

        }
        catch(Exception ex )
        { 
        }

}  }//end if

我们不能在没有看到代码的情况下告诉你…我们可以看看你正在处理的一些代码吗?这将有助于回答问题。我怀疑没有人会在没有看到一些代码的情况下帮助你!最好有一个登录操作的测试用例,或者在返回任何记录时只执行带有提供值的select检查。GebruikersnaamTekst是一个JJTEKST字段,如果该字段与“cursist”匹配,您按下ok按钮,他将移动到下一个屏幕。但是当数据正确地用英语填写时,else语句“Gebruiker niet gevonden”不能出现。当“curist”正确地填写时,我想我理解逻辑。我看到的是,它会添加按钮,然后执行SQL调用,因此也会输出错误。我会补充更多的答案…抱歉,还有一个问题,当在GebruikersnaamTekst(tekstfield)填写“Student”时,是否可以禁用密码字段,这样你就不能在其中添加任何内容?这是在什么样的窗口中操作的?我对Java UI构造有点缺乏经验,但我认为可以在GebruikersnaamTekst中添加一个事件处理程序,以使Password.setVisible(false),现在的代码是:try{String idnr=GebruikersnaamTekst.getText();if(idnr.matches(“curist”){Password.setedible(false);}else{Password.setediate(true);}}catch(Exception e){}但不起作用,只是当GebruikersnaamTekst为“student”时不需要编辑