2014-10-31 49 views
0

问题:我处理大量更新语句,此时我将其添加到ArrayList,然后将数组列表传递给循环所有更新语句的函数。他们没有准备。通用准备语句更新

你会如何解决这个问题?我正在考虑“通用”更新功能,它接收表格和参数列表,然后“准备”所有内容。

public void updateFromList(ArrayList<String> updateQueriesList) { 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection con = DriverManager.getConnection("jdbc:oracle:thin:@:1521:", "", ""); 

     PreparedStatement pstmt = null; 

     for (String s : updateQueriesList) { 
      pstmt = con.prepareStatement(s); 
      pstmt.addBatch(); 
     } 

     pstmt.executeBatch(); 

     con.close(); 
     } 

    } catch (Exception ex) { 
    } 
} 

回答

0

我不确定你问的是否真的有可能。至少不容易,没有一些解决不好的代码的工作。

我的建议是为每个要更新的表创建一个“主要”更新语句。每桌一个功能。然后,您将传递用于准备声明的对象,而不管它们可能包含哪些信息。然后,您将遍历对象列表并在每个对象上调用“主要”更新语句。

在此解决方案中,您不会将任何语句添加到列表中,您的主要功能中只有一个语句适用于该表中可能会出现的所有数据。

实施例:

public class ObjectToBeUpdated 
{ 
    //data 
    //getters and setters 
} 

public void updateObject(ObjectToBeUpdated object) { 
    Connection connection = null; 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     connection = DriverManager.getConnection("jdbc:oracle:thin:@:1521:", "", ""); 

     String sql = UDPATE_STATEMENT with ? for parameters 

     PreparedStatement preparedStatement = connection.prepareStatement(sql); 
     preparedStatement.setInt(1, object.getValue1()); //etc 
     //get all values from object passed in and set them in order 

     preparedStatement.executeUpdate(); 
     connection.commit(); 

     connection.close(); 
     } 

    } catch (Exception ex) { 
    } 
    finally { 
     connection.close(); 
    } 
} 

这是做了很多的允许可读且非常易于管理代码,只有在一个时间以适用于一种类型的对象/表的应用程序的一种非常常见的方式。