重用ResultSet并调用java

时间:2017-09-28 20:25:51

标签: java database

我有一个方法getalldetails(查询),它将从数据库中获取详细信息。我想在多个类中并基于查询调用此方法。它应该从数据库中获取数据。查询将动态传递。我想按照以下方式做。请指正,并建议我在整个项目中只使用一种方法进行数据检索。

我正面临着这些问题:

  1. 返回结果集的类型和方法的调用以及结果的再利用。请指导我并帮助我
  2. 例如:在DatabaseDAO.java类

    public class DatabaseDAO {
    
        public static void main(String[] args) {        
    
            public ResultSet getalldetails(String query){
             ResultSet rs = null;
             try{
               PreparedStatement stmt = con.prepareStatement(query);
                rs = stmt.executeQuery();
                } 
            catch (SQLException e){
                    e.printStackTrace();
                }
    
                return rs;  
               } 
             }
    

    假设我有两个类Employee和Product.java。我想在两个类中调用此方法。以下是我的代码:

    public class Employee {
    String query ="Select * from Employee";
    ResultSet rs=null;
    List<EmployeeDto> emp= new ArrayList<EmployeeDto>();
    DatabaseDAO.getalldetails(query);
    while (rs .has next)
    {
     EmployeeDto qd=new EmployeeDto();                      
     qd.setidrs.getInt("id"));
     qd.setname(rs.getString("name"));
     qd.setrollno(rs.getString("rollno"));
      emp.add(qd);
     }
    }
    

    同样,我有Product.java。我想基于查询调用相同的方法来从数据库中检索数据。

    public class Product {
    String query ="Select * from Product";
    ResultSet rs=null;
    List<ProductDto> emp= new ArrayList<ProductDto>();
    DatabaseDAO.getalldetails(query);
    while (rs .has next)
    {
     ProductDto qd=new ProductDto();                        
     pd.setidrs.getInt("prodid"));
     pd.setname(rs.getString("prodname"));
     pd.setrollno(rs.getString("item"));
      prod.add(pd);
     }
    }
    

    我想在整个项目中使用一种方法从DB中检索数据。意思是我想做方法的可重用性。请帮帮我。

2 个答案:

答案 0 :(得分:0)

您可以在类中使其成为静态方法。说数据库。您可以通过导入Database类并调用Database.getalldetails (query)

来随处访问它

另外,我在您的代码中看到,您已在getalldetails方法中定义了main。你应该把它放在外面。 在Employee类中,将代码放在类中,但在方法/构造函数之外。添加构造函数或方法并将代码放在那里

答案 1 :(得分:0)

嗯,这可以作为你概念的一个例子。

我将其称为DBMain类,它具有bot类的入口点,DatabaseDAO类的Product和Employee类。

首先,创建DatabaseDAO类的实例,然后初始化数据库连接。

DatabaseDAO dbDAO = new DatabaseDAO();
dbDAO.initConnection();

其次,使用DatabaseDAO实例作为参数创建Employee和Product类。

Employee emp = new Employee(dbDAO);
Product prd = new Product(dbDAO);

最后,您可以通过调用方法,getEmployeeList和getProductList从两个实例中检索数据,然后关闭DAO类拥有的连接。

try {
    emplist = emp.getEmployeeList();
    prdlist = prd.getProductList();
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
finally
{
    dbDAO.closeConnection();
}

类的结构是一样的, 例如,getProductList()看起来是:

public List<ProductDto> getProductList() throws SQLException {
    ResultSet rs = null;
    List<ProductDto> prd = new ArrayList<ProductDto>();

    rs = dataDAO.getalldetails(query);

    while (rs.next()) {
        ProductDto qd = new ProductDto();
        qd.setProdid(rs.getInt("prodid"));
        qd.setProdname(rs.getString("prodname"));
        qd.setItem(rs.getString("item"));
        prd.add(qd);
    }

    rs.close();

    return prd;
}

您可以在DatabaseDAO实例中调用getalldetails方法,并将结果集设为dto对象列表。

员工和产品类:

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Employee {
    private static final String query = "Select * from Employee";

    final DatabaseDAO dataDAO;

    Employee(final DatabaseDAO dataDAO) {
        this.dataDAO = dataDAO;
    }

    public List<EmployeeDto> getEmployeeList() throws SQLException {
        ResultSet rs = null;
        List<EmployeeDto> emp = new ArrayList<EmployeeDto>();

        rs = dataDAO.getalldetails(query);

        while (rs.next()) {
            EmployeeDto qd = new EmployeeDto();
            qd.setId(rs.getInt("id"));
            qd.setName(rs.getString("name"));
            qd.setRollno(rs.getString("rollno"));
            emp.add(qd);
        }

        rs.close();

        return emp;
    }

}

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Product {

    private static final String query = "Select * from Product";

    final DatabaseDAO dataDAO;

    Product(final DatabaseDAO dataDAO) {
        this.dataDAO = dataDAO;
    }

    public List<ProductDto> getProductList() throws SQLException {
        ResultSet rs = null;
        List<ProductDto> prd = new ArrayList<ProductDto>();

        rs = dataDAO.getalldetails(query);

        while (rs.next()) {
            ProductDto qd = new ProductDto();
            qd.setProdid(rs.getInt("prodid"));
            qd.setProdname(rs.getString("prodname"));
            qd.setItem(rs.getString("item"));
            prd.add(qd);
        }

        rs.close();

        return prd;
    }
}

Dao类 - DatabaseDAO,这个类只有一个结构,你可以根据数据库建立你的连接对象。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class DatabaseDAO {
    private Connection con;

    public DatabaseDAO()
    {

    }

    public void initConnection()
    {

    }

    public Connection getDBConnection()
    {
        return con;
    }

    public void closeConnection()
    {
        try {
            this.con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public ResultSet getalldetails(String query) {
        ResultSet rs = null;
        try {
            PreparedStatement stmt = con.prepareStatement(query);
            rs = stmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return rs;
    }
}

这里的主要方法类:

import java.sql.SQLException;
import java.util.List;

public class DBMain {
    public static void main(String[] args)
    {
        DatabaseDAO dbDAO = new DatabaseDAO();
        dbDAO.initConnection();

        Employee emp = new Employee(dbDAO);
        Product prd = new Product(dbDAO);
        List<EmployeeDto> emplist = null;
        List<ProductDto> prdlist = null;

        try {
            emplist = emp.getEmployeeList();
            prdlist = prd.getProductList();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            dbDAO.closeConnection();
        }
    }
}

然后,剩下的dto类,EmpolyeeDto和ProductDto可能如下:

public class EmployeeDto {
    private int id;
    private String name;
    private String rollno;


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRollno() {
        return rollno;
    }
    public void setRollno(String rollno) {
        this.rollno = rollno;
    }


}

public class ProductDto {
     private int prodid;
     private String prodname;
     private String item;

    public int getProdid() {
        return prodid;
    }
    public void setProdid(int prodid) {
        this.prodid = prodid;
    }
    public String getProdname() {
        return prodname;
    }
    public void setProdname(String prodname) {
        this.prodname = prodname;
    }
    public String getItem() {
        return item;
    }
    public void setItem(String item) {
        this.item = item;
    }


}