ResultSet # isFirst () не указывает, что строка существует - PullRequest
0 голосов
/ 08 декабря 2018

Я только что столкнулся с проблемой получения данных из ms access в java-программе. Я использую драйвер ucanaccess. Вот мой код

public void loginUser(){
  // variables
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;

    // Step 1: Loading or 
    // registering Oracle JDBC driver class
    try {

        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    }
    catch(ClassNotFoundException cnfex) {

        System.out.println("Problem in loading or "
                + "registering MS Access JDBC driver");
        cnfex.printStackTrace();
    }

    // Step 2: Opening database connection
    try {

        String msAccDB; 
                msAccDB = "C:/Users/Hidayat Ullah/Documents/Record.accdb";
        String dbURL = "jdbc:ucanaccess://"
                + msAccDB; 

        // Step 2.A: Create and 
        // get connection using DriverManager class
        connection = DriverManager.getConnection(dbURL); 

        // Step 2.B: Creating JDBC Statement 
  String  sql= "SELECT * FROM Student WHERE studentid = ? AND password = ?";
 PreparedStatement pstmt = connection.prepareStatement(sql);
  //printing here loginId.getText() and loginPass.getText() always has value 
  //i entered in the gui
 pstmt.setString(1, loginId.getText()); 
 pstmt.setString(2,loginPass.getText());
 ResultSet row = pstmt.executeQuery();

if(row.isFirst()){
  JOptionPane.showMessageDialog(null, "Student ID 
:"+row.getString("studentid"));
 System.exit(0);
  }else{
   JOptionPane.showMessageDialog(null, "No such record exists in database 
 against this ID, either ID or Password is incorrect.");
 System.exit(0);
 }

. Проблема в том, что при вводе идентификатора пользователя и паролянаходится в БД, но всегда не возвращает никаких записей.что я тут не так делаю?

1 Ответ

0 голосов
/ 09 декабря 2018

Когда объект ResultSet создается изначально, он позиционируется перед первой строкой, поэтому .isFirst() будет возвращать false, пока вы не вызовете .next() для позиционирования ResultSet на первый ряд (если таковой существует).Вместо вызова .isFirst() ваш код может просто вызвать .next(), и если он возвращает true, то найдена хотя бы одна подходящая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...