Проблема с logi c приложения книжного магазина в java EE - PullRequest
0 голосов
/ 11 июля 2020

Я делаю книжный магазин, и пока у меня всего 3 стола.

Book:
- id:(int) primary key, autoincrement, not null,
- title:(varchar) not null,
- price: (decimal) not null

Cart:
-id:(int) primary key, autoincrement, not null 

и

Article:
- id:(int) primary key, autoincrement, not null,
- title:(varchar) not null,
- price: (decimal) not null,
- cart_id:(int) foreign key referencing cart

Для меня логично, когда пользователь нажимает «добавить в корзину» кнопку, чтобы проверить, существует ли уже корзина, если она существует, я верну эту корзину, если не создаст новую. И пользователь поместит несколько статей в одну корзину. Это мой класс для вставки корзины в db:

public class CartDAO {

private static DataSource dataSource;
private static int autoIncKey = -1;

public static void insertCart() {
    Connection conn = null;
    ResultSet rs = null;
    
    try {
        InitialContext ctx = new InitialContext();
        dataSource = (DataSource) ctx.lookup("jdbc/NemkeDB");
        conn = dataSource.getConnection();
        
            String insert = "insert into cart() values()";
            PreparedStatement ps = conn.prepareStatement(insert, RETURN_GENERATED_KEYS);
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            if (rs.next()) {
                autoIncKeyFromApi = rs.getInt(1);
            } catch(Exception e){
            System.err.println(e);
           }

В CartDAO я хочу получить эту проверку, примерно так:

if(cart == null){
'insert into cart()values()'
}else{ // if cart exist i want to return that cart id}

я не знаю, как это сделать с GeneratedKeys.

Ниже приведен класс, в котором я передаю идентификатор из корзины в ArticleDAO

public class ArticleDAO {

private static DataSource dataSource;
private static ArrayList<Article> articleList = new ArrayList<>();

public static void insertArticle(String title, double price) {
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    try {
        InitialContext ctx = new InitialContext();
        dataSource = (DataSource) ctx.lookup("jdbc/NemkeDB");
        conn = dataSource.getConnection();
        st = conn.createStatement();
        CartDAO.insertCart(); // Here is where i call(insert) Cart
        String insert = "insert into article(title,price,cart_id) values(?,?,?)";
        PreparedStatement ps = conn.prepareStatement(insert);
        ps.setString(1, title); 
        ps.setDouble(2, price);;
        ps.setInt(3, CartDAO.getAutoIncKey()); // Here i pass that id
        ps.executeUpdate();
        rs = st.executeQuery("select * from artical");
        while (rs.next()) {
            String articalTitle = rs.getString("title");
            double articalPrice = rs.getDouble("price");
            Artical artical = new Artical(articalTitle, articalPrice);
            articalList.add(artical);
        }
    } catch (Exception e) {
        System.err.println(e);
    }

Мой вопрос: как правильно выполнить эту проверку? Может с сеансом? А как вернуть id, если корзина есть? Я знаю, что это длинный вопрос, но я думаю, что это легко для любого, у кого есть опыт работы с java. Спасибо всем, кто потратил время, чтобы прочитать и ответить на эту проблему.

...