0

我正在练习 JDBC 批处理并出现错误:

错误1:不支持的功能错误2:执行不能为空或null

Property files include:
itemsdao.updateBookName = Update Books set bookname = ? where books.id = ?
itemsdao.updateAuthorName = Update books set authorname = ? where books.id = ?

我知道我可以在一次更新中执行 DML 语句,但我正在 JDBC 中练习批处理。

下面是我的方法

public void update(Item item) {
            String query = null;

        try {
            connection = DbConnector.getConnection();
            property = SqlPropertiesLoader.getProperties("dml.properties");
            connection.setAutoCommit(false);

            if ( property == null )
            {
                Logging.log.debug("dml.properties does not exist. Check property loader or file name is spelled right");
                return;
            }

            query = property.getProperty("itemsdao.updateBookName");
            statement = connection.prepareStatement(query);
            statement.setString(1, item.getBookName());
            statement.setInt(2, item.getId());
            statement.addBatch(query);

            query = property.getProperty("itemsdao.updateAuthorName");
            statement = connection.prepareStatement(query);
            statement.setString(1, item.getAuthorName());
            statement.setInt(2, item.getId());
            statement.addBatch(query);

            statement.executeBatch();
            connection.commit();

        }catch (ClassNotFoundException e) {
            Logging.log.error("Connection class does not exist", e);
        } 
        catch (SQLException e) {
            Logging.log.error("Violating PK constraint",e);
        }

        //helper class th
        finally {

            DbUtil.close(connection);
            DbUtil.closePreparedStatement(statement);

        }
4

1 回答 1

2

您将方法StatementPreparedStatement类混合在一起:

  • (addBatch(String sql)属于Statement并且不能在PreparedStatementor上调用CallableStatement

  • addBatch()将与PreparedStatement(如您的教程所示)一起使用。

Oracle 实现了它自己的和标准的(JDBC 2.0)批处理。来自标准更新批处理文档

在 Oracle JDBC 应用程序中,更新批处理旨在与使用不同绑定值集重复处理的准备好的语句一起使用。

于 2013-11-11T03:33:52.497 回答