В основном я пытаюсь создать программу калькулятора затрат, которая рассчитывает ежемесячную стоимость бизнеса и сохраняет значение стоимости на основе месяца. Поэтому я создал таблицу базы данных 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