当前位置: 首页 > 知识库问答 >
问题:

使用Ecplise从数据库检索列表时出现问题

姜俊民
2023-03-14

我目前正在做一个优惠券项目。在处理我的facade类时,我遇到一个问题,通过使用外键从表中输入客户的ID来获取客户已购买的优惠券列表。

我使用的方法是:

@Override
public List<Coupon> getPurchasedCoupons(int customerID) throws SQLException {
    {
        Connection connection = pool.getConnection();

        ArrayList<Coupon> customerCoupon = new ArrayList<>();
        ArrayList<Long> customerCouponID = new ArrayList<>();
        Statement stmt = null;

        long coupID = 0;
        stmt = connection.createStatement();

        ResultSet resultSet = stmt.executeQuery("SELECT * FROM `couponsystem`.`customers_vs_coupons` WHERE (`CUSTOMER_ID` = '?')");

        while ((resultSet != null) && (resultSet.next())) {
            coupID = resultSet.getLong("COUPON_ID");

            customerCouponID.add(coupID);
        }

        Iterator<Long> myIterator = customerCouponID.iterator();

        while (myIterator.hasNext()) {
            Long couponID = myIterator.next();

            resultSet = stmt.executeQuery(
                    "SELECT * FROM `couponsystem`.`customers_vs_coupons` where COUPON_ID = " + couponID);

            while (resultSet.next()) {
                Coupon coupon = new Coupon(resultSet.getInt(1), resultSet.getInt(2),
                        Category.categoryFor(resultSet.getInt(3)), resultSet.getString(4), resultSet.getString(5),
                        resultSet.getDate(6), resultSet.getDate(7), resultSet.getInt(8), resultSet.getDouble(9),
                        resultSet.getString(10));
                customerCoupon.add(coupon);
            }
        }

        ConnectionPool.getInstance().restoreConnection(connection);

        return customerCoupon;
    }

}

优惠券类别:

import java.util.Date;

public class Coupon {

    private int id;
    private int companyID;
    private Category category;
    private String title;
    private String description;
    private Date startDate;
    private Date endDate;
    private int amount;
    private double price;
    private String image;

    public Coupon(int companyID, Category category, String title, String description, Date startDate, Date endDate,
            int amount, double price, String image) {
        this.companyID = companyID;
        this.category = category;
        this.title = title;
        this.description = description;
        this.startDate = startDate;
        this.endDate = endDate;
        this.amount = amount;
        this.price = price;
        this.image = image;
    }

    public Coupon(int id, int companyID, Category category, String title, String description, Date startDate,
            Date endDate, int amount, double price, String image) {
        this.id = id;
        this.companyID = companyID;
        this.category = category;
        this.title = title;
        this.description = description;
        this.startDate = startDate;
        this.endDate = endDate;
        this.amount = amount;
        this.price = price;
        this.image = image;
    }

    public Coupon() {
        super();
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setCompanyID(int companyID) {
        this.companyID = companyID;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public int getId() {
        return id;
    }

    public int getCompanyID() {
        return companyID;
    }

    @Override
    public String toString() {
        return "Coupon: ID = " + id + ", Company ID = " + companyID + ", Category = " + category + ", Title = " + title
                + ", Description = " + description + ", Start Date = " + startDate + ", End Date = " + endDate
                + ", Amount = " + amount + ", Price = " + price + ", IMAGE = " + image;
    }

}

调用方法:

public List<Coupon> getCustomerCoupons() throws SQLException {

    return coup.getPurchasedCoupons(customerID);

}

我的SQL表:

Coupon_vs_Customer表仅包含2行。它们都是其他表的外键。CustomerID连接到“Customers”表,而coupon_ID连接到表“Coupons”

CustomerID   Coupon_ID
1             1
1             2
1             3

正如您在上面看到的,ID为1的客户拥有3张优惠券,我试图在我的eclipse项目的列表中阅读它们。

我没有得到任何异常,但是我得到一个空的ArrayList。我似乎无法解决这个问题,因为我对JDBC还很陌生。

共有1个答案

梁福
2023-03-14

您的第一个查询尝试查找id=“?”的客户。也许这是试图创建一个预先准备好的语句,但您还需要几个步骤

String query = "SELECT COUPON_ID FROM couponsystem.customers_vs_coupons WHERE CUSTOMER_ID = ?";
PreparedStatement statement = conn.prepareStatement(query);
statement.setInt(1, customerID);

ResultSet resultSet = statement.executeQuery();
 类似资料:
  • 我有一个名为employee_comp_field的表,其中提供了薪资字段 然后,我有另一个表,其中员工工资数据存储emp_compensation每个字段。正如你所看到的emp_id 10有三套记录,因为他在同一年获得了三次加薪(year_id=101),这可以通过salary_order领域来识别。 我想用最大工资确定所有雇员的名单,我的期望输出如下: emp_id10号得到了三次加薪……所以

  • 我想从数据库中检索整个表并将其显示到我的jsp页面中,但我得到了一个错误 我的工作人员豆。java是 而我的getAllDetailDAO.java是 连接提供程序包com.staff.db; 而我的DisplayAllDetail.jsp是 我的错误是 StackTrace:org.apache.jasper.servlet.jspServletwrapper.handleJSPExceptio

  • 我正在创建一个JavaFX应用程序,我已经很好地连接到了数据库。然而,当我从表中获取数据时,我得到了一个错误 组织。h2.jdbc。JdbcSQLException:未找到表“touch”;SQL语句:从讲座[42102-192]中选择名称 我100%确定我连接到数据库并且表肯定在那里,对为什么会这样有任何建议吗? hear是我的连接代码和我正在运行的代码,以便您可以看到 和正在运行的查询

  • 我运行下面的脚本时出错,我不知道如何更正它。本质上,我在mysql中有一个名为gamestbl的表。我希望用户输入一些关于游戏名称或游戏描述的关键词,然后php将正确的游戏显示为下拉列表(理想情况下)甚至信息表。 错误显示: 警告:mysqli_query()至少需要2个参数,其中1个参数在第29行的C:\xampp\htdocs\introductiongphp\Email.php中给出 警告:

  • 我正在做一个项目,从firebase(它是“排队的”)中提取数据。本质上,数据是以W/a时间戳的方式保存的,因此当调用数据时,可以按顺序排序(先进先出)。 我面临的问题是当我在我的应用程序上检索数据。根据我的研究,在堆栈溢出和firebase文档中,.value提供一个快照,并在添加新数据时继续监听数据。然而,当添加新数据时,它将获得整个集合的新快照(因此在我的应用程序数组上“复制数据”)。

  • 我刚刚开始学习SpringMVC。我试图将一些数据从Thymeleaf表单保存到存储库,这扩展了CrudRepository。不幸的是,数据没有显示。 当我进入结果页面时,我看到使用的ID,但没有键入要形成的数据。哪里出了错? 这是控制器 `型号: 存储库: 表格摘录: 并从结果模板中提取: