de.forsthaus.h2.My_H2_SampleDataFiller.java Source code

Java tutorial

Introduction

Here is the source code for de.forsthaus.h2.My_H2_SampleDataFiller.java

Source

/**
 * Copyright 2010 the original author or authors.
 * 
 * This file is part of Zksample2. http://zksample2.sourceforge.net/
 *
 * Zksample2 is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Zksample2 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Zksample2.  If not, see <http://www.gnu.org/licenses/gpl.html>.
 */
package de.forsthaus.h2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean;

/**
 * This <b>database filler</b> is called on application startup by spring. <br>
 * The declaration of this bean is in the <br>
 * file: src/main/resources/customize-applicationContext.xml <br>
 * file: src/main/resources/createSampleData.sql <br>
 * This class creates and fills the db with the needed tables, sequences and
 * sample data records.
 * 
 * @author bbruhns
 * @author Stephan Gerth
 */
public class My_H2_SampleDataFiller implements InitializingBean {

    private DataSource dataSource;

    @Override
    public void afterPropertiesSet() throws Exception {
        final Logger logger = Logger.getLogger(getClass());
        final Map<Integer, String> allSql = new HashMap<Integer, String>();
        final Connection conn = this.dataSource.getConnection();
        try {
            // reads the sql-file from the classpath
            final InputStream inputStream = getClass().getResourceAsStream("/createSampleData.sql");
            try {

                final Statement stat = conn.createStatement();

                final BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                String str;
                StringBuilder sb = new StringBuilder();
                int count = 0;
                while ((str = in.readLine()) != null) {
                    sb.append(str);
                    // make a linefeed at each readed line
                    if (StringUtils.endsWith(str.trim(), ";")) {
                        final String sql = sb.toString();
                        stat.addBatch(sql);
                        sb = new StringBuilder();
                        allSql.put(Integer.valueOf(count++), sql);
                    } else {
                        sb.append("\n");
                    }
                }

                final int[] ar = stat.executeBatch();
                final int i = ar.length;

                logger.info("Create DemoData");
                logger.info("count batch updates : " + i);

            } finally {
                try {
                    inputStream.close();
                } catch (final IOException e) {
                    logger.warn("", e);
                }
            }
        } catch (final BatchUpdateException e) {
            final BatchUpdateException be = e;
            final int[] updateCounts = be.getUpdateCounts();
            if (updateCounts != null) {
                for (int i = 0; i < updateCounts.length; i++) {
                    final int j = updateCounts[i];
                    if (j < 0) {
                        logger.error("SQL errorcode: " + j + " -> in SQL\n" + allSql.get(Integer.valueOf(i)));
                    }
                }
            }
            throw e;
        } finally {
            try {
                conn.close();
            } catch (final SQLException e) {
                logger.warn("", e);
            }
        }
    }

    // ++++++++++++++++++++++++++++++++++++++++++++++++++++++//
    // ++++++++++++++++++ getter / setter +++++++++++++++++++//
    // ++++++++++++++++++++++++++++++++++++++++++++++++++++++//

    public DataSource getDataSource() {
        return this.dataSource;
    }

    // injected by spring
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
}