Kesalahan status kursor tidak valid saat membaca dari database

Saya mencoba mengambil detail dari Access Database dan menggunakan nilai-nilai itu dalam skrip Selenium saya, tetapi entah bagaimana saya tidak dapat melakukannya.. Meskipun saya berhasil terhubung ke database dan mencetak nilai di konsol. Saya tidak dapat menggunakan nilai yang sama dalam skrip. Ini adalah kode yang saya gunakan. Mohon beri tahu saya jika saya salah.

package AccessDB;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;

public class Sample_Access_DB_Test {
    public static WebDriver driver;
    public static String dbLocation;
    public static Connection con;
    public static Statement smt;
    public static ResultSet rs;
  @Test
  public void f() throws Exception {
      //Database Location
      dbLocation = "D:\\AccessDB's\\Userinfor1.accdb";

      //Connecting to the Database
      con = DriverManager.getConnection("jdbc:odbc:ADB");
      System.out.println("Connection Establised Successfully");

      //Creating DB statement
      smt = con.createStatement();
      System.out.println("Statement Successfully Created");

      //Executing Created Statement
      rs = smt.executeQuery("Select * from Userinfor1");
      System.out.println("Query Executed");

      while(rs.next()){
         System.out.println(rs.getString(2));
         //System.out.println(rs.getString(3));
         //System.out.println(rs.getString(4));
        }
      driver.findElement(By.id("login-username")).sendKeys(rs.getString(2));
      /*
      driver.findElement(By.id("login-username")).sendKeys("gopi_krishna28");
      driver.findElement(By.id("login-passwd")).sendKeys("gopikrishna28");
      driver.findElement(By.id("login-signin")).click();*/
  }
  @BeforeTest
  public void beforeTest() {
      driver = new FirefoxDriver();
      driver.get("http://www.yahoomail.com/");
  }

  @AfterTest
  public void afterTest() {
  }

}

dan inilah kesalahan yang terjadi

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] Status kursor tidak valid


person user1856470    schedule 09.09.2015    source sumber


Jawaban (1)


Setelah Anda menjalankan kueri SELECT, loop while(rs.next()){ Anda mengulangi baris-baris di ResultSet dan membuang nilai ke konsol. Setelah loop keluar, posisi ResultSet saat ini tidak menunjuk ke baris yang valid; itu diposisikan setelah baris terakhir.

Jadi, di baris berikutnya

driver.findElement(By.id("login-username")).sendKeys(rs.getString(2));

ketika Anda mencoba menggunakan rs.getString(2) Anda mendapatkan kesalahan karena ResultSet tidak diposisikan pada baris yang valid.

Anda juga harus:

  1. singkirkan loop while(rs.next()){ dan mungkin lakukan satu rs.next() untuk memposisikan ResultSet di baris pertama (dengan asumsi ada) dan kemudian melanjutkan dari sana, atau

  2. jika kueri SELECT Anda mengembalikan beberapa baris dan Anda ingin melakukan beberapa pemrosesan untuk setiap baris maka pertahankan loop while(rs.next()){ tetapi pindahkan kode Selenium Anda di dalam loop di mana panggilan seperti rs.getString(2) akan dapat mengembalikan nilai untuk saat ini baris ResultSet.

person Gord Thompson    schedule 15.09.2015
comment
hmm oke... saya mencoba cara lain... yah itu berhasil tetapi tidak sepenuhnya. saya mengganti pernyataan while dengan pernyataan if if(rs.next()){ driver.findElement(By.id(rs.getString(2))).sendKeys(rs.getString(3)); driver.findElement(By.id(rs.getString(4))).sendKeys(rs.getString(5)); } tetapi masalahnya di sini hanya mengakses kolom dan bukan baris.. bagaimana cara mengakses baris? ada ide tentang ini? - person user1856470; 16.09.2015