通用准备好的更新声明

时间:2014-10-31 14:00:53

标签: java sql oracle prepared-statement

一个问题:我处理了大量的更新语句,此时我将添加到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) {
    }
}

1 个答案:

答案 0 :(得分: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();
    }
}

这是一种非常常见的方法,可以执行许多应用程序,这些应用程序允许可读且易于管理的代码,这些代码一次只能应用于一种类型的对象/表。