2014-05-12 129 views
0

我似乎無法在任何地方找到直接的答案,我試圖使用java類更新現有的數據庫條目。用戶在jsp頁面上的表單中輸入他們的詳細信息,然後調用該servlet並將這些值分配給用戶對象。然後將該對象傳遞給編輯概要文件方法以執行數據庫操作。使用java更新數據庫條目

當我嘗試合併它的對象時,它創建一個新的條目,當我創建更新查詢並通過它不更新。有人請給我一個如何使用java進行更新的例子。

Java的:

public static void editUserProfile(User editUser) { 

    try{ 
     factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
     EntityManager em = factory.createEntityManager(); 
     System.out.println("In edit profile Method"); 

     int ID = editUser.get_Id(); 
     String name = editUser.getName(); 
     String address1 = editUser.getAddress1(); 
     String address2 = editUser.getAddress2(); 
     String county = editUser.getCounty(); 
     String phone = editUser.getTelephone(); 
     String email = editUser.getEmail(); 
     String website = editUser.getWebsite(); 
     String information = editUser.getInformation(); 
     String password = editUser.getPassword(); 
     String searchQuery = "UPDATE User SET name='"+name+"' address1='"+address1+"' address2='"+address2+"' " 
          + "county='"+county+"' phone='"+phone+"' email='"+email+"' website='"+website+"' " 
          + "information='"+information+"' password='"+password+"' WHERE id='"+ID+"'"; 

     // Update user in the database 
     em.getTransaction().begin(); 
     //Query r = em.createNativeQuery(searchQuery); 
     em.merge(searchQuery); 

     em.getTransaction().commit(); 

     em.close(); 
+0

我強烈建議您不要將字符串打擊到查詢中。創建一個PreparedStatement並添加變量。否則,您可以在以後自行解決各種SQL注入問題。 –

+0

Err在JPA中使用createQuery和命名參數。 –

+0

@Tripp動力學你能介意給我一個例子嗎? – SteveK

回答

1

好像你與直接使用JDBC混淆JPA。

JPA的一個很好的概述是在這裏(見把他們放在一起部分)

https://glassfish.java.net/javaee5/persistence/persistence-example.html

要調用一個字符串,em.merge()的時候,你真正應該更新的對象,然後告訴實體管理器合併更改(將它們保存到數據庫中)。

您創建的UPDATE語句是您如何使用JDBC來完成的,但是您會使用Connection/PreparedStatement和?對於參數/等...看起來好像你的示例代碼是基於JPA的。