从数据库读取时"Invalid cursor state"错误



我试图从Access数据库获取详细信息,并在我的硒脚本中使用这些值,但不知何故我无法这样做。尽管我能够成功地连接到数据库并在控制台中打印值。我无法在脚本中使用相同的值。这是我用的代码。请让我知道我哪里做错了。

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() {
  }
}

,这是抛出的错误

java.sql。SQLException: [Microsoft][ODBC Driver Manager]游标状态无效

在执行SELECT查询之后,您的while(rs.next()){循环遍历ResultSet中的行并将值转储到控制台。在该循环退出后,ResultSet的当前位置不指向有效行;它位于最后一行之后。

那么在下一行

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

当您尝试使用rs.getString(2)时,您会得到一个错误,因为ResultSet没有定位在有效行。

你需要:

  1. 摆脱while(rs.next()){循环,也许只是做一个单一的rs.next()定位ResultSet在第一行(假设一个存在),然后从那里继续,或

  2. 如果你的SELECT查询返回多行,你想为每一行做一些处理,然后保持while(rs.next()){循环,但移动你的硒代码循环中,像rs.getString(2)的调用将能够返回ResultSet当前行的值。

最新更新