Использовать результат из одного класса в другом?

#java

#java

Вопрос:

У меня есть 2 класса на Java, и я пытаюсь использовать результат из одного класса в качестве значения для второго класса, это то, что у меня есть.

DBCall.java —

 package com.example.tests;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.TimeUnit;

public class DBCall {

public void generateid(){

    int count;


    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://IP:PORT;DatabaseName=SubscriberManager;integratedSecurity=true;");
        System.out.println("Connection Successfull");
        System.out.println(conn); 

        //--------------------------------------------------------------------
        Statement stmt = conn.createStatement();
        String query1= "SELECT COUNT(*) from dbo.vSubscriberReporting where [SubscriberEmailAddressStatusID] in (5,1,6,7) and [SubscriberStatusID] = 1 AND [SubscriberAddresseeStatusID] = 1 and CompanySizeCodeID IN (4)";
        ResultSet rs= stmt.executeQuery(query1);

        if(rs.next()) //Expecting one row.
        {
    count = rs.getInt(1);
             System.out.println("Value: "   count);

        }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

public static void main(String[] args) {
    DBCall gen = new DBCall();
    gen.generateid();

}}
  

QuickJavaTest.java

 package com.example.tests;

import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class QucikJavaTest {
 private WebDriver driver;
 private String baseUrl;
 private boolean acceptNextAlert = true;
 private StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception {
 driver = new FirefoxDriver();
baseUrl = "https://testurl";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

@Test
public void ConfirmValue7() throws Exception {
driver.get(baseUrl   "/web/SubscriberManagement/Admin");
new Select(driver.findElement(By.id("SelectedFilter"))).selectByVisibleText("Job Title");
driver.findElement(By.id("Filters_0__Values_GB")).click();
driver.findElement(By.id("Filters_0__Values_AF")).click();
driver.findElement(By.cssSelector("button")).click();
for (int second = 0;; second  ) {
    if (second >= 60) fail("timeout");
    try { if (isElementPresent(By.id("Filters_1__Value"))) break; } catch (Exception e) {}
    Thread.sleep(1000);
}

driver.findElement(By.xpath("(//a[contains(text(),'Delete')])[2]")).click();
new Select(driver.findElement(By.id("SelectedFilter"))).selectByVisibleText("Job Function");
driver.findElement(By.cssSelector("button")).click();
for (int second = 0;; second  ) {
    if (second >= 60) fail("timeout");
    try { if (isElementPresent(By.id("Filters_1__Values"))) break; } catch (Exception e) {}
    Thread.sleep(1000);
}

driver.findElement(By.id("Filters_1__Values_28")).click();
driver.findElement(By.cssSelector("button.floatRight")).click();
driver.findElement(By.id("sqlDetailsHeading")).click();
try {
  assertEquals("7", driver.findElement(By.cssSelector("span.count")).getText());
} catch (Error e) {
  verificationErrors.append(e.toString());
}
 }

@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
  fail(verificationErrorString);
}
 }

 private boolean isElementPresent(By by) {
try {
  driver.findElement(by);
  return true;
} catch (NoSuchElementException e) {
  return false;
}
 }

public boolean isAcceptNextAlert() {
return acceptNextAlert;
}

public void setAcceptNextAlert(boolean acceptNextAlert) {
this.acceptNextAlert = acceptNextAlert;
}
}
  

что я хочу сделать, это взять значение «count» из DBCall.java и используйте его в качестве значения для проверки в assertEquals(«7») в QuickJavaTest.java , Я уверен, что это просто, я просто не могу придумать лучший способ сделать это.

Комментарии:

1. Почему бы не вернуть int значение из generateid() ?

Ответ №1:

Вам нужно вернуть значение, полученное в generateid методе из базы данных, затем вы можете использовать его в других методах по своему усмотрению / необходимости.

Измените метод с returning void на return int :

 public int generateid() {
    int count = 0;
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://IP:PORT;DatabaseName=SubscriberManager;integratedSecurity=true;");
        System.out.println("Connection Successfull");
        System.out.println(conn); 

        Statement stmt = conn.createStatement();
        String query1= "SELECT COUNT(*) from dbo.vSubscriberReporting where [SubscriberEmailAddressStatusID] in (5,1,6,7) and [SubscriberStatusID] = 1 AND [SubscriberAddresseeStatusID] = 1 and CompanySizeCodeID IN (4)";
        ResultSet rs= stmt.executeQuery(query1);

        if(rs.next()) //Expecting one row.
        {
            count = rs.getInt(1);
            System.out.println("Value: "   count);
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return count;
}
  

Затем извлеките данные в нужном методе:

 @Test
public void ConfirmValue7() throws Exception {
    DBCall dbCall = new DBCall();
    int count = dbCall.generateid();
    //use count as you want/need
    //rest of your code...
}
  

Комментарии:

1. Я внес ваши изменения, и теперь консоль отображает — Ошибка: метод Main не найден в классе com.example.tests. DBCall, пожалуйста, определите метод main как: public static void main(String[] args) или класс приложения JavaFX должен расширять javafx.application. Приложение

2. @user3768497 ты хотя бы понимаешь, что тебе нужно делать? Вы знаете хотя бы базовый Java?

3. @user3768497 из вашего комментария кажется, что вы удалили или изменили main метод внутри DBCall класса, который вообще не рассматривается в моем ответе.

4. Хорошо, я увидел, в чем проблема, и исправил ее, я новичок в Java и Selenium, если у вас есть представление о ресурсах для чтения, я был бы очень рад, кстати, спасибо за всю вашу помощь 🙂

5. @user3768497 начинайте изучать по одному. Я рекомендую вам сначала изучить Java, и лучше всего следовать официальным руководствам по Java .