2016-08-06 2 views
1

Я не могу обновить определенную запись в моей базе данных. Я не могу найти ошибку, и Eclipse не обнаруживает ошибки исключения.Не удалось обновить запись базы данных в MySQL

Заранее благодарен!

Вот мой основной метод

public void actionPerformed(ActionEvent arg0) { 
     int id = PaymentRecord.id; 
     int transID = Integer.parseInt(TransactionTxt.getText()); 
     double totalPay = Double.parseDouble(lblTotalPay.getText()); 
     double medAmt = Double.parseDouble(MedicineAmountTxt.getText()); 
      PaymentEntity e1 = new PaymentEntity(id, NameTxt.getText(), transID, DateTxt.getText(), PaymentTxt.getText(), medAmt, MedAdmnTxt.getText(), RoomTxt.getText(),ServicesTxt.getText(),totalPay); 
      if (PaymentDA.updatePayment(e1)) { 
       JOptionPane.showMessageDialog(HMSFrame,"Record created successfully", "Alert",JOptionPane.INFORMATION_MESSAGE); 
       NameTxt.setText(""); 
       TransactionTxt.setText(""); 
       DateTxt.setText(""); 
       PaymentTxt.setText(""); 
       ConsultationAmountTxt.setText(""); 
       ConsultationSubsidyTxt.setText(""); 
       MedicineAmountTxt.setText(""); 
       MedicineSubsidyTxt.setText(""); 
       RoomAmountTxt.setText(""); 
       RoomSubsidyTxt.setText(""); 
       ServicesAmountTxt.setText(""); 
       ServicesSubsidyTxt.setText(""); 
       lblTotalPay.setText(""); 
       MedAdmnTxt.setText(""); 
       lblMedAmtTxt.setText(""); 
       ServicesTxt.setText(""); 
       RoomTxt.setText(""); 

      } else 
       JOptionPane.showMessageDialog(HMSFrame,"Sorry. Record not updated.", "Alert",JOptionPane.ERROR_MESSAGE); 
      } 

    }); 

Вот мой метод доступа к данным

public static boolean updatePayment(PaymentEntity payment) { 
    boolean success = false; 
    DBController db = new DBController(); 
    String dbQuery; 
    PreparedStatement pstmt; 

    db.getConnection();  

    dbQuery = "UPDATE payment.paymentdetail SET name = ?, transactionID = ?, dateOfTransaction = ?, paymentMethod = ?, medicineAmount = ?, medicineAdministered = ?, roomType = ?, servicesOffered = ?, amountDue = ? WHERE id = ?"; 
    pstmt = db.getPreparedStatement(dbQuery); 

    try { 
     pstmt.setString(1, payment.getName()); 
     pstmt.setInt(2, payment.getTransactionID()); 
     pstmt.setString(3, payment.getDateOfTransaction()); 
     pstmt.setString(4, payment.getPaymentMethod()); 
     pstmt.setDouble(5, payment.getMedicineAmount()); 
     pstmt.setString(6, payment.getMedicineAdministered()); 
     pstmt.setString(7, payment.getroomType()); 
     pstmt.setString(8, payment.getServicesOffered()); 
     pstmt.setDouble(9, payment.getAmountDue()); 
     pstmt.setInt(10, payment.getid()); 
     if (pstmt.executeUpdate() == 1) 
      success = true; 
     pstmt.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    System.out.println(success); 
    db.terminate(); 

    return success;  
} 

А вот мой Entity

public class PaymentEntity { 

int id; 
String name; 
int transactionID; 
String dateOfTransaction; 
String paymentMethod; 
double amountDue; 
double medicineAmount; 
String medicineAdministered; 
String roomType; 
String servicesOffered; 

public PaymentEntity(int id, String name,int transactionID, String dateOfTransaction, String paymentMethod, double amountDue, 
     String roomType, String medicineAdministered, String servicesOffered, double medicineAmount) { 
    super(); 
    this.id = id; 
    this.name = name; 
    this.transactionID = transactionID; 
    this.dateOfTransaction = dateOfTransaction; 
    this.paymentMethod = paymentMethod; 
    this.amountDue = amountDue; 
    this.medicineAmount = medicineAmount; 
    this.roomType = roomType; 
    this.servicesOffered = servicesOffered; 
    this.medicineAdministered = medicineAdministered; 
} 

public int getid() { 
    return id; 
} 
public void setid(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public int getTransactionID() { 
    return transactionID; 
} 
public void setTransactionID(int transactionID) { 
    this.transactionID = transactionID; 
} 
public String getDateOfTransaction() { 
    return dateOfTransaction; 
} 
public void setDateOfTransaction(String dateOfTransaction) { 
    this.dateOfTransaction = dateOfTransaction; 
} 
public String getPaymentMethod() { 
    return paymentMethod; 
} 
public void setPaymentMethod(String paymentMethod) { 
    this.paymentMethod = paymentMethod; 
} 
public double getAmountDue() { 
    return amountDue; 
} 
public void setAmountDue(double amountDue) { 
    this.amountDue = amountDue; 
} 
public double getMedicineAmount() { 
    return medicineAmount; 
} 
public void setMedicineAmount(double medicineAmount) { 
    this.medicineAmount = medicineAmount; 
} 
public String getroomType() { 
    return roomType; 
} 
public void setroomType(String roomType) { 
    this.roomType = roomType; 
} 
public String getServicesOffered() { 
    return servicesOffered; 
} 
public void setServicesOffered(String servicesOffered) { 
    this.servicesOffered = servicesOffered; 
} 
public String getMedicineAdministered() { 
    return medicineAdministered; 
} 
public void setMedicineAdministered(String medicineAdministered) { 
    this.medicineAdministered = medicineAdministered; 
} 

}

Это мой getPreparedStatement в моем DBCo ntroller класс

public PreparedStatement getPreparedStatement(String dbQuery) { 
    PreparedStatement pstmt = null; 
    System.out.println("DB prepare statement: " + dbQuery); 
    try { 
     // create a statement object 
     pstmt = con.prepareStatement(dbQuery); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return pstmt; 
} 

Вот мой GetConnection

public void getConnection(){ 
    String url = ""; 
    try { 
     url = "jdbc:mysql://127.0.0.1/patient"; 
     con = DriverManager.getConnection(url, "root", "IT1639"); 
     System.out.println("Successfully connected to " + url+ "."); 
    } 
    catch (java.sql.SQLException e) { 
     System.out.println("Connection failed! ->"+ url); 
     System.out.println(e); 
    } 
} 

Самое странное, что я могу создавать и удалять записи, но не обновлять

+0

Что на самом деле происходит при запуске кода? – martinhh

+0

Что вы получаете в своей консоли true или false? укажите также код getConnection и getPreparedStatement –

+0

@martinhhI Я получаю ложную распечатку –

ответ

1

Что является результатом метода «PaymentDA. updatePayment (e1) ", true или false? Если true, то диалоговое окно «обновлено» покажет, что появится «не обновлено».

1) Попытка сохранения результата

PaymentDA.updatePayment(e1) 

к логическому идентификатору, то вывести его с помощью:

System.out.println(blnResult); 

2) Другой метод диагностики, который можно использовать печатает вывод пораженных записей путем хранения в целочисленном идентификаторе метода:

pstmt.executeUpdate() 

к этому утверждению:

int intRowsAffected=pstmt.executeUpdate(); 
System.out.println(intRowsAffected); 

Выходной сигнал должен быть только 1, а не 0, 2 или более.

3) Третье диагностическое, что вы можете попробовать печатает:

payment.getId() 

, чтобы гарантировать, что выходные соответствует или существует для записи в базе данных

1

просто использовать простой способ

try{ 

      PreparedStatement stmt = obj.conn.prepareStatement("update query here"); 
      stmt.executeUpdate(); 
      JOptionPane.showMessageDialog(HMSFrame,"Record created successfully", "Alert",JOptionPane.INFORMATION_MESSAGE); 

    } 
    catch(SQLException e){ 
      JOptionPane.showMessageDialog(HMSFrame,e.getMessage(), "Alert",JOptionPane.ERROR_MESSAGE); 

    } 
1

Просто еще одна идея, что вы могли проверить:

Является id Поле действительно уникально в вашей db-схеме? В противном случае

if (pstmt.executeUpdate() == 1) 
     success = true; 

может быть неправильной, если обновляется более одной записи. Но я полагаю, вы посмотрели таблицу базы данных и проверили, было ли какое-либо обновление !?