Java prepareStatement可以像Statement一样做同样的事情吗?

Java prepareStatement可以像Statement一样做同样的事情吗?,java,sql,oracle,prepared-statement,Java,Sql,Oracle,Prepared Statement,我的数据库是Oracle。 我知道语句可以将SQL语句(插入、删除或更新)混合到一个批次中。这是我的密码 DBConnection db = new DBConnection(); Connection c = db.getConn(); Statement s = null ; try { String sql = "insert into t1(id, name) values ('10', 'apple')"; String sql1 = "insert into t

我的数据库是Oracle。 我知道
语句
可以将SQL语句(插入、删除或更新)混合到一个批次中。这是我的密码

DBConnection db = new DBConnection();
Connection c = db.getConn();
Statement s = null ;


try
{ 
    String sql = "insert into t1(id, name) values ('10', 'apple')";
    String sql1 = "insert into t1(id, name) values ('14', 'pie')";
    String sql2 = "delete from t1 where id = '10'";
    s = c.createStatement();

    s.addBatch(sql);
    s.addBatch(sql1);
    s.addBatch(sql2);

    int[] re = s.executeBatch();...

我的问题是
PreparedStatement
可以这样做吗?如何创建呢?

您可以通过创建批处理,也可以通过执行批处理

有关PreparedStatement的更多信息,请查看

如果我没说错的话,你想这样做:

public void save(List<Entity> elements) throws SQLException {
Connection connection = null;
PreparedStatement statement = null;
try {
    connection = database.getConnection();
    statement = connection.prepareStatement(SQL_INSERT);
    for (int i = 0; i < elements.size(); i++) {
        Element element= elements.get(i);
        statement.setString(1, element.getProperty1());
        statement.setString(2, element.getProperty2());
        .....

        statement.addBatch();
        if ((i + 1) % 200 == 0) {
            statement.executeBatch(); // Execute every 200 items.
        }
    }
    statement.executeBatch();
} finally {
    if (statement != null) try { statement.close(); } catch (SQLException e) { //}
    if (connection != null) try { connection.close(); } catch (SQLException e) {//}
}
public void save(列表元素)引发SQLException{
连接=空;
PreparedStatement=null;
试一试{
connection=database.getConnection();
语句=connection.prepareStatement(SQL\U插入);
对于(int i=0;i
}


在这种情况下,我每执行200项,如果您希望您可以设置自己的。但一定要测试它,因为它还取决于驱动程序对批处理操作的限制。

语句:

用于对数据库的通用访问。在运行时使用静态SQL语句时非常有用。语句接口无法接受参数。 PreparedStatement:

计划多次使用SQL语句时使用。PreparedStatement接口在运行时接受输入参数。 CallableStatement:


要访问数据库存储过程时使用。CallableStatement接口还可以接受运行时输入参数。这可能有助于
PreparedStatement
扩展
Statement
,并存储预编译的SQL语句。所以它使用相同的语法。你看到任何问题了吗?@Maheswaran Ravisankar:那么你如何使用一个
PreparedStatement
在批处理中运行不同的SQL语句呢?@Maheswaran Ravisankar one
PreparedStatement
只能存储一个预编译的SQL语句。但是我有两个,一个是插入,另一个是删除
PreparedStatement.addBatch()
无法添加任何参数。@Ron和一匹没有名字的马,我看错了!!对不起<代码>语句=连接.prepareStatement(SQL\U插入)
您只需添加
insert
SQL语句,但我有一个
delete
SQL语句。我需要在一个批处理中放入两个或多个类型SQL语句。然后尝试保留另一个
语句
,以便删除,希望它能够工作,因为这两个语句都是update语句。还要确保删除时没有违反任何
完整性约束
。请坚持常规格式。把它写得粗体和巨大不会引起更多的关注。