Тяжелый: нет колонки с именем: "PAYMENTDATE" - PullRequest
1 голос
/ 11 января 2020

Я использую NetBeans для создания проекта Java. В моей таблице базы данных или DTO у них обоих есть столбец с именем paymentDate. Я не понимаю, почему он отправляет эту ошибку. И странная вещь в том, что когда я изменяю «PAYMENTDATE» на «DATE», система отправляет мне еще одну ошибку: Серьезный: нет столбца с именем: «CLIENTORDERID».

clientOrder Code:


package dbase;
import dto.ClientDTO;
import dto.clientOrderDTO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;

public class ClientOrder {

    private static final String PERSON_ORDER = "SELECT clientName, orderName, paymentDate AS Date " 
                                          +  "FROM Client JOIN clientOrder ON Client.id = clientOrder.clientId " 
                                          +  "WHERE Client.id = ? ";

    public ArrayList<clientOrderDTO> findCurrentClientOrderForClient(ClientDTO client) throws SQLException{ 
        ArrayList<clientOrderDTO> list = new ArrayList<>();
        Connection con = DB_Manager.getConnection();
        try{ 
            PreparedStatement stmt = con.prepareStatement(PERSON_ORDER);
            stmt.setInt(1, client.getId());
            ResultSet rs = stmt.executeQuery();

            while(rs.next()){

                Calendar paymentDate = Calendar.getInstance(); 
                paymentDate.setTime(rs.getDate("PAYMENTDATE"));

                clientOrderDTO order = new clientOrderDTO(    
                                rs.getInt("CLIENTORDERID"),
                                client,
                                rs.getString("ORDERNAME"),
                                paymentDate
                );

                list.add(order);
             }           
            con.close();  
        }   
        catch (NullPointerException npe)
        {
            System.err.println("No connection available");
        }
        catch (SQLException sqle)
        {
            System.err.println(sqle.getMessage());
        }
            return list;
    }
}

Создать таблицу


CREATE TABLE Client(
    id integer not null primary key generated always as identity (start with 1, increment by 1),
    clientName varchar(20) not null,
    username varchar(10) not null unique,
    pwd varchar(50) not null
);



CREATE TABLE clientOrder(
    id integer not null primary key generated always as identity (start with 1, increment by 1),
    clientId integer not null,
    orderName varchar(20) not null,
    paymentDate Date not null,
    constraint client_FK foreign key(clientId) references Client(id)
);

DTO:

package dto;

import java.io.Serializable;

public class ClientDTO implements Serializable
{
    private final int id;
    private final String name;
    private final String username;
    private final String password;

    public ClientDTO(int id, String name, String username, String password){
        this.id = id;
        this.name = name;
        this.username = username;
        this.password = password;
    }

    public int getId(){
        return id;
    }

    public String getName(){
        return name;
    }

    public String getUsername(){
        return username;
    }

    public boolean passwordMatches(String pwd){
        return password.equals(pwd);
    }


}

package dto;

import java.io.Serializable;
import java.util.Calendar;

import javax.inject.Named;

@Named(value = "clientOrder")

public class clientOrderDTO implements Serializable{
    private final int id;
    private final ClientDTO client;
    private final String orderName;
    private Calendar paymentDate;

    public clientOrderDTO(int id, ClientDTO client, String orderName,Calendar paymentDate){
        this.id = id;
        this.client = client;
        this.orderName = orderName;
        this.paymentDate = paymentDate;
    }

    public int getId(){
        return id;
    }

    public ClientDTO getClient(){
        return client;
    }

    public String getOrderName(){
        return orderName;
    }

    public Calendar getPaymentDate(){
        return paymentDate;
    }

    public void setPatmentDate(Calendar paymentDate){
        this.paymentDate = paymentDate;
    }

}

1 Ответ

2 голосов
/ 11 января 2020

В вашем запросе вы добавили псевдоним столбца от paymentDate до Date:

paymentDate AS Date

, поэтому вы должны использовать имя столбца Date. Также нет списка с именем или псевдонимом CLIENTORDERID в списке SELECT. Если вы хотите использовать значение столбца, этот столбец должен появиться в списке SELECT, чтобы он был возвращен запросом.

...