我试图从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没有定位在有效行。
你需要:
摆脱
while(rs.next()){
循环,也许只是做一个单一的rs.next()
定位ResultSet在第一行(假设一个存在),然后从那里继续,或如果你的SELECT查询返回多行,你想为每一行做一些处理,然后保持
while(rs.next()){
循环,但移动你的硒代码在循环中,像rs.getString(2)
的调用将能够返回ResultSet当前行的值。