Как сохранить значения в отдельных ячейках в Ms Access без создания новых строк? - PullRequest
2 голосов
/ 25 октября 2019

В основном я пытаюсь создать программу калькулятора затрат, которая рассчитывает ежемесячную стоимость бизнеса и сохраняет значение стоимости на основе месяца. Поэтому я создал таблицу базы данных Ms Access со всеми месяцами в качестве заголовков столбцов. Однако всякий раз, когда я пытаюсь сохранить значения в единичные месяцы, в конечном итоге создаются целые строки, в которых будут отображаться введенные мной значения, но все остальные месяцы будут просто показывать «0». Так, например, если я введу общую стоимость января как 600, она будет отображаться под столбцом января как 600, но остальная часть строки в остальные месяцы будет показывать «0». Что я хочу сделать, так это иметь возможность вводить данные в отдельные столбцы без создания новых строк каждый раз, возможно ли это?

Единственное, о чем я мог подумать, это использовать 'If/ Else 'условие, в основном я создал JComboBox, и если пользователь выбрал конкретный месяц, я бы сравнил введенную строку со строкой этого месяца, а затем, используя PrepareStatement, я бы ввел значение в этот конкретный столбец, однако это неКажется, все работает так хорошо, как я получил ошибки, касающиеся параметра, и в случае, если он сработал, он все равно заполнил всю строку.

private void stcostActionPerformed(java.awt.event.ActionEvent evt) {
    String mbox = mntbox.getSelectedItem().toString(); //JComboBox in which the user can select the months
    String tctxt = tcosttxt.getText(); //JTextField which displays the cost, I converted it into string to use for storing in database. 
    try{
        con = Connections.getConnection(); //Database connection variable created in a separate class
        if(mbox == "January"){
           pst = con.prepareStatement("insert into MonthlyCosts(January) values (?)");
           pst.setString(1, tctxt);
        }
        else if(mbox == "February"){
            pst = con.prepareStatement("insert into MonthlyCosts(February) values (?)");
            pst.setString(2, tctxt);
        }
        else if(mbox == "March"){
            pst = con.prepareStatement("insert into MonthlyCosts(March) values (?)");
            pst.setString(3, tctxt);
        }
        else if(mbox == "April"){
        pst = con.prepareStatement("insert into MonthlyCosts(April) values (?)");    
            pst.setString(4, tctxt);
        }
        else if(mbox == "May"){
            pst = con.prepareStatement("insert into MonthlyCosts(May) values (?)");
            pst.setString(5, tctxt);
        }
        else if(mbox == "June"){
            pst = con.prepareStatement("insert into MonthlyCosts(June) values (?)");
            pst.setString(6, tctxt);
        }
        else if(mbox == "July"){
            pst = con.prepareStatement("insert into MonthlyCosts(July) values (?)");
            pst.setString(7, tctxt);
        }
        else if(mbox == "August"){
            pst = con.prepareStatement("insert into MonthlyCosts(August) values (?)");
            pst.setString(8, tctxt);
        }
        else if(mbox == "September"){
            pst = con.prepareStatement("insert into MonthlyCosts(September) values (?)");
            pst.setString(9, tctxt);
        }
        else if(mbox == "October"){
            pst = con.prepareStatement("insert into MonthlyCosts(October) values (?)");
            pst.setString(10, tctxt);
        }
        else if(mbox == "November"){
            pst = con.prepareStatement("insert into MonthlyCosts(November) values (?)");
            pst.setString(11, tctxt);
        }
        else if(mbox == "December"){
            pst = con.prepareStatement("insert into MonthlyCosts(December) values (?)");
            pst.setString(12, tctxt);
        }
        else{
            JOptionPane.showMessageDialog(rootPane, "You have not enterred a month to store");
        }
        int conf = JOptionPane.showConfirmDialog(rootPane, "Confirm to Store", "Are You Sure?", JOptionPane.YES_NO_OPTION);
        if(conf==0){
            pst.execute();
            JOptionPane.showMessageDialog(rootPane, "Data is Saved", "Done", 1);
            clearFields();
        } else{
            JOptionPane.showMessageDialog(rootPane, "Data Not Saved");
        }
        pst.execute();
    }catch(Exception e){
        System.out.println(""+e);
    }

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc ::: 4.0.4 Недопустимый аргумент в вызове JDBC: индекс параметра вне диапазона: 2

...