#java #netbeans #logging
#java #netbeans #ведение журнала
Вопрос:
Я хочу создать систему входа в систему с базой данных 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 )
{
}
}
Комментарии:
1. Мы не можем сказать вам, не видя кода…
2. Не могли бы мы посмотреть часть кода, над которым вы работаете? Это немного поможет с ответом.
3. Я сомневаюсь, что кто-нибудь поможет вам, не просмотрев сначала какой-нибудь код!
4. лучше иметь тестовый пример для операции входа в систему или просто выполнить проверку выбора с предоставленным значением, если она возвращает какую-либо запись.
Ответ №1:
Вы надеетесь, что она будет успешной, если вы правильно подберете «Студент», верно?
Возможно, проблема в чувствительности к регистру, попробуйте это.
if (idnr.toLowerCase().matches("cursist"))
Это будет оценивать true и не учитывать регистр.
Также, что касается потока выполнения программы, если они находятся в одном классе или функции main (), она будет выполнять Интернет независимо от локального результата, что также может привести к ошибкам.
Возможно, создайте глобальную логическую переменную. Чтобы подтвердить, что вы выполнили проверку учащегося / Полный код:
/**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
Комментарии:
1. GebruikersnaamTekst — это JJtekstfield, и если это соответствует «cursist», и вы нажмете на кнопку ok, он перейдет к следующему экрану. Но оператор else «Gebruiker niet gevonden» не должен отображаться, когда данные правильно заполнены в en, когда заполнен «cursist»
2. Правильно, я думаю, я понимаю логику. Что я вижу, так это то, что она добавит кнопку, а затем независимо выполнит вызов SQL, следовательно, также выведет ошибку. Я добавлю больше к ответу…
3. Извините, у меня еще один вопрос, возможно ли, когда «Student» заполняется в GebruikersnaamTekst (текстовое поле), отключить поле пароля, чтобы вы не могли ничего в него вставить?
4. В каком окне это работает? Я немного неопытен в построении пользовательского интерфейса Java, но я бы подумал, что вы могли бы добавить обработчик событий в GebruikersnaamTekst, чтобы сделать Password.set видимым(false),
5. Теперь код выглядит так: попробуйте { String idnr = GebruikersnaamTekst.getText(); if (idnr.matches(«Cursist»)) { Password.setEditable(false); } else { Password.setEditable(true); } } catch (исключение e) { } но не сработало, редактировать не нужно, только когда GebruikersnaamTekst является «student»