/** * Writes a list of {@link FileContent}s to the database using <tt>INSERT</tt>s and the given * connection. It fills two tables, the <i>filecontent</i> table ({@link FileContent}) and the * <i>filecontent_chunk</i> table ({@link ChunkChecksum}). * * <p>To do the latter (write chunk references), this method calls {@link * #writeFileContentChunkRefs(Connection, FileContent) writeFileContentChunkRefs()} for every * {@link FileContent}. * * <p><b>Note:</b> This method executes, but does not commit the queries. * * @param connection The connection used to execute the statements * @param databaseVersionId * @param fileContents List of {@link FileContent}s to be inserted in the database * @throws SQLException If the SQL statement fails */ public void writeFileContents( Connection connection, long databaseVersionId, Collection<FileContent> fileContents) throws SQLException { for (FileContent fileContent : fileContents) { PreparedStatement preparedStatement = getStatement(connection, "filecontent.insert.all.writeFileContents.sql"); preparedStatement.setString(1, fileContent.getChecksum().toString()); preparedStatement.setLong(2, databaseVersionId); preparedStatement.setLong(3, fileContent.getSize()); preparedStatement.executeUpdate(); preparedStatement.close(); // Write chunk references writeFileContentChunkRefs(connection, fileContent); } }
private void writeFileContentChunkRefs(Connection connection, FileContent fileContent) throws SQLException { PreparedStatement preparedStatement = getStatement(connection, "filecontent.insert.all.writeFileContentChunkRefs.sql"); int order = 0; for (ChunkChecksum chunkChecksum : fileContent.getChunks()) { preparedStatement.setString(1, fileContent.getChecksum().toString()); preparedStatement.setString(2, chunkChecksum.toString()); preparedStatement.setInt(3, order); preparedStatement.addBatch(); order++; } preparedStatement.executeBatch(); preparedStatement.close(); }