1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.plugins.updater.util.sql; 35 36 import fr.paris.lutece.portal.service.plugin.Plugin; 37 import fr.paris.lutece.portal.service.util.AppLogService; 38 import fr.paris.lutece.util.sql.Transaction; 39 40 import org.apache.commons.io.FileUtils; 41 42 import java.io.File; 43 import java.io.IOException; 44 45 import java.sql.SQLException; 46 47 import java.util.StringTokenizer; 48 49 50 /** 51 * SQL utils 52 */ 53 public final class SqlUtils 54 { 55 /** 56 * Private constructor 57 */ 58 private SqlUtils( ) 59 { 60 } 61 62 /** 63 * Executes a SQL script file 64 * @param strFilename The filename 65 * @param plugin The plugin 66 * @throws IOException If an IO exception occurs 67 * @throws SQLException If an SQL exception occurs 68 */ 69 public static void executeSqlFileScript( String strFilename, Plugin plugin ) 70 throws IOException, SQLException 71 { 72 try 73 { 74 File file = new File( strFilename ); 75 String strScript = FileUtils.readFileToString( file ); 76 executeSqlScript( strScript, plugin ); 77 } 78 catch ( IOException ex ) 79 { 80 AppLogService.error( "updater - execute SQL script error : " + ex.getMessage( ), ex ); 81 throw ex; 82 } 83 } 84 85 /** 86 * Executes an SQL script 87 * @param strScript An SQL script 88 * @param plugin The plugin 89 * @throws SQLException If an SQL exception occurs 90 */ 91 public static void executeSqlScript( String strScript, Plugin plugin ) 92 throws SQLException 93 { 94 String strCleanScript = strScript.substring( 0, strScript.lastIndexOf( ";" ) ); 95 StringTokenizer st = new StringTokenizer( strCleanScript, ";" ); 96 97 Transaction transaction = new Transaction( ); 98 99 try 100 { 101 while ( st.hasMoreTokens( ) ) 102 { 103 String strSQL = st.nextToken( ); 104 transaction.prepareStatement( strSQL ); 105 transaction.executeStatement( ); 106 } 107 108 transaction.commit( ); 109 } 110 catch ( SQLException ex ) 111 { 112 transaction.rollback( ex ); 113 AppLogService.error( "Execute SQL script error : " + ex.getMessage( ) + " - transaction rolled back.", ex ); 114 throw ex; 115 } 116 } 117 }