【问题标题】:"Invalid cursor state" error when reading from database从数据库读取时出现“无效游标状态”错误
【发布时间】:2015-09-09 11:20:41
【问题描述】:

我正在尝试从 Access 数据库中获取详细信息并在我的 selenium 脚本中使用这些值,但不知何故我无法这样做。虽然我能够成功连接到数据库并在控制台中打印值。我无法在脚本中使用相同的值。这是我正在使用的代码。如果我出错了,请告诉我。

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] 游标状态无效

【问题讨论】:

    标签: java ms-access selenium jdbc webdriver


    【解决方案1】:

    执行 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()){ 循环,但将您的 Selenium 代码 移入循环,其中调用像 @987654327 @ 将能够返回 ResultSet 的当前行的值。

    【讨论】:

    • 嗯,好吧...我尝试了另一种方法...嗯,它有点工作,但不完全。我用 if 语句替换 while 语句 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));但这里的事情是它只访问列而不是行..我如何让它访问行?对此有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多