Ошибка исключения SQL при попытке выполнить запрос к базе данных sqllite - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь запросить базу данных из приложения для входа в базу данных SQLite. После того, как пользователь введет имя пользователя и пароль и нажмете «Enter», он должен проверить учетные данные в базе данных. Когда я нажал кнопку входа в систему, он показывает:

java.sql.SQLException:sql error or missing database

Ниже приведен код для лучшего понимания. В чем ошибка в коде?

Примечание:

  • В моей базе данных есть таблица логина.
  • Соединение установлено

try
{
    String query="select * from Login where username=? Password=?";
    PreparedStatement pst=connection.prepareStatement(query);
    pst.setString(1, userField.getText());
    pst.setString(2, passwordField.getText());
    ResultSet rs=pst.executeQuery();
    int count=0;

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

    if(count==1) {
        JOptionPane.showMessageDialog(null, "Username and Password is correct");
    }
    else if (count>1)
    {
        JOptionPane.showMessageDialog(null, " Duplicate Username and Password is correct");
    }
    else
    {
        JOptionPane.showMessageDialog(null, "  Username and Password is not correct");
    }
    rs.close();
    pst.close();

} catch(Exception e){
    JOptionPane.showMessageDialog(null, e);
}

1 Ответ

0 голосов
/ 04 мая 2018
String query="select * from Login where username=user123 Password=password123";
PreparedStatement pst=connection.prepareStatement(query);
pst.setString(1, userField.getText());
//pst.setString(2, passwordField);

Основы использования PreparedStatement должны быть примерно такими:

String query="select * from Login where username = ? and Password = ?";
PreparedStatement pst=connection.prepareStatement(query);
pst.setString(1, userField.getText());
pst.setString(2, passwordField.getText());

То есть строка запроса указывает, куда вы хотите добавить параметры в строку. Затем вам нужно заменить параметры значениями из текстовых компонентов вашего GUI.

Кроме того, почему у вас есть цикл while? Разве смысл запроса не в том, чтобы найти идентификатор пользователя / пароль в базе данных? Если это так, в ResultSet может быть только одна запись.

Прочтите раздел Доступ к базе данных JDBC для основ SQL.

Этот вопрос не имеет ничего общего с Swing. Сначала узнайте, как правильно выполнить SQL-запрос, жестко закодировав значения идентификатора пользователя / пароля в методе setString (...). Как только вы это заработаете, вы попытаетесь выполнить запрос с динамическими данными, полученными из текстового поля в вашем графическом интерфейсе.

...